Author: lupus
Date: 2006-03-21 09:59:26 -0500 (Tue, 21 Mar 2006)
New Revision: 58219
Modified:
trunk/mono/mono/metadata/ChangeLog
trunk/mono/mono/metadata/appdomain.c
trunk/mono/mono/metadata/domain.c
trunk/mono/mono/metadata/exception.c
trunk/mono/mono/metadata/icall.c
trunk/mono/mono/metadata/locales.c
trunk/mono/mono/metadata/marshal.c
trunk/mono/mono/metadata/object.c
trunk/mono/mono/metadata/object.h
trunk/mono/mono/metadata/reflection.c
trunk/mono/mono/metadata/threadpool.c
trunk/mono/mono/metadata/threads.c
Log:
Tue Mar 21 15:54:30 CET 2006 Paolo Molaro <[EMAIL PROTECTED]>
* object.h, appdomain.c, domain.c, exception.c, icall.c,
locales.c, marshal.c, object.c, reflection.c, threadpool.c,
threads.c: introduced MONO_OBJECT_SETREF() macro to be able to insert
write barriers for reference stores with managed objects accessed with
C structures in the runtime and in embedding programs.
Modified: trunk/mono/mono/metadata/ChangeLog
===================================================================
--- trunk/mono/mono/metadata/ChangeLog 2006-03-21 14:16:07 UTC (rev 58218)
+++ trunk/mono/mono/metadata/ChangeLog 2006-03-21 14:59:26 UTC (rev 58219)
@@ -1,3 +1,12 @@
+
+Tue Mar 21 15:54:30 CET 2006 Paolo Molaro <[EMAIL PROTECTED]>
+
+ * object.h, appdomain.c, domain.c, exception.c, icall.c,
+ locales.c, marshal.c, object.c, reflection.c, threadpool.c,
+ threads.c: introduced MONO_OBJECT_SETREF() macro to be able to insert
+ write barriers for reference stores with managed objects accessed with
+ C structures in the runtime and in embedding programs.
+
2006-03-20 Raja R Harinath <[EMAIL PROTECTED]>
* icall.c (ves_icall_Type_GetInterfaces): Avoid using
Modified: trunk/mono/mono/metadata/appdomain.c
===================================================================
--- trunk/mono/mono/metadata/appdomain.c 2006-03-21 14:16:07 UTC (rev
58218)
+++ trunk/mono/mono/metadata/appdomain.c 2006-03-21 14:59:26 UTC (rev
58219)
@@ -482,7 +482,7 @@
/* Inherit from the root domain since MS.NET does this */
MonoDomain *root = mono_get_root_domain ();
if (root->setup->application_base)
- setup->application_base = mono_string_new_utf16 (data,
mono_string_chars (root->setup->application_base), mono_string_length
(root->setup->application_base));
+ MONO_OBJECT_SETREF (setup, application_base,
mono_string_new_utf16 (data, mono_string_chars (root->setup->application_base),
mono_string_length (root->setup->application_base)));
}
mono_context_init (data);
@@ -1008,7 +1008,7 @@
}
refass = mono_assembly_get_object (domain, ass);
- refass->evidence = evidence;
+ MONO_OBJECT_SETREF (refass, evidence, evidence);
return refass;
}
@@ -1051,7 +1051,7 @@
if (refass == NULL)
refass = mono_assembly_get_object (domain, ass);
- refass->evidence = evidence;
+ MONO_OBJECT_SETREF (refass, evidence, evidence);
return refass;
}
@@ -1124,7 +1124,7 @@
args = (MonoArray *) mono_array_new (ad->data,
mono_defaults.string_class, 0);
refass = mono_assembly_get_object (ad->data, assembly);
- refass->evidence = evidence;
+ MONO_OBJECT_SETREF (refass, evidence, evidence);
res = mono_runtime_exec_main (method, (MonoArray *)args, NULL);
Modified: trunk/mono/mono/metadata/domain.c
===================================================================
--- trunk/mono/mono/metadata/domain.c 2006-03-21 14:16:07 UTC (rev 58218)
+++ trunk/mono/mono/metadata/domain.c 2006-03-21 14:59:26 UTC (rev 58219)
@@ -55,7 +55,7 @@
#endif
#define GET_APPCONTEXT() (mono_thread_current ()->current_appcontext)
-#define SET_APPCONTEXT(x) mono_thread_current ()->current_appcontext = (x)
+#define SET_APPCONTEXT(x) MONO_OBJECT_SETREF (mono_thread_current (),
current_appcontext, (x))
static guint16 appdomain_list_size = 0;
static guint16 appdomain_next = 0;
Modified: trunk/mono/mono/metadata/exception.c
===================================================================
--- trunk/mono/mono/metadata/exception.c 2006-03-21 14:16:07 UTC (rev
58218)
+++ trunk/mono/mono/metadata/exception.c 2006-03-21 14:59:26 UTC (rev
58219)
@@ -163,7 +163,7 @@
ex = mono_exception_from_name (image, name_space, name);
if (msg)
- ex->message = mono_string_new (mono_object_get_domain
((MonoObject*)ex), msg);
+ MONO_OBJECT_SETREF (ex, message, mono_string_new
(mono_object_get_domain ((MonoObject*)ex), msg));
return ex;
}
@@ -400,9 +400,10 @@
ex = mono_exception_from_name (
mono_get_corlib (), "System", "ArgumentNullException");
- if (arg)
- ((MonoArgumentException *)ex)->param_name =
- mono_string_new (mono_object_get_domain
((MonoObject*)ex), arg);
+ if (arg) {
+ MonoArgumentException *argex = (MonoArgumentException *)ex;
+ MONO_OBJECT_SETREF (argex, param_name, mono_string_new
(mono_object_get_domain ((MonoObject*)ex), arg));
+ }
return ex;
}
@@ -421,9 +422,10 @@
ex = mono_exception_from_name_msg (
mono_get_corlib (), "System", "ArgumentException", msg);
- if (arg)
- ((MonoArgumentException *)ex)->param_name =
- mono_string_new (mono_object_get_domain
((MonoObject*)ex), arg);
+ if (arg) {
+ MonoArgumentException *argex = (MonoArgumentException *)ex;
+ MONO_OBJECT_SETREF (argex, param_name, mono_string_new
(mono_object_get_domain ((MonoObject*)ex), arg));
+ }
return ex;
}
@@ -442,9 +444,10 @@
ex = mono_exception_from_name (
mono_get_corlib (), "System", "ArgumentOutOfRangeException");
- if (arg)
- ((MonoArgumentException *)ex)->param_name =
- mono_string_new (mono_object_get_domain
((MonoObject*)ex), arg);
+ if (arg) {
+ MonoArgumentException *argex = (MonoArgumentException *)ex;
+ MONO_OBJECT_SETREF (argex, param_name, mono_string_new
(mono_object_get_domain ((MonoObject*)ex), arg));
+ }
return ex;
}
Modified: trunk/mono/mono/metadata/icall.c
===================================================================
--- trunk/mono/mono/metadata/icall.c 2006-03-21 14:16:07 UTC (rev 58218)
+++ trunk/mono/mono/metadata/icall.c 2006-03-21 14:59:26 UTC (rev 58219)
@@ -2512,8 +2512,8 @@
attr = (MonoReflectionDllImportAttribute*)mono_object_new (domain,
DllImportAttributeClass);
- attr->dll = mono_string_new (domain, scope);
- attr->entry_point = mono_string_new (domain, import);
+ MONO_OBJECT_SETREF (attr, dll, mono_string_new (domain, scope));
+ MONO_OBJECT_SETREF (attr, entry_point, mono_string_new (domain,
import));
attr->call_conv = (flags & 0x700) >> 8;
attr->charset = ((flags & 0x6) >> 1) + 1;
if (attr->charset == 1)
@@ -3882,7 +3882,7 @@
aname = (MonoReflectionAssemblyName *) mono_object_new (
domain, System_Reflection_AssemblyName);
- aname->name = mono_string_new (domain,
mono_metadata_string_heap (image, cols [MONO_ASSEMBLYREF_NAME]));
+ MONO_OBJECT_SETREF (aname, name, mono_string_new (domain,
mono_metadata_string_heap (image, cols [MONO_ASSEMBLYREF_NAME])));
aname->major = cols [MONO_ASSEMBLYREF_MAJOR_VERSION];
aname->minor = cols [MONO_ASSEMBLYREF_MINOR_VERSION];
@@ -3891,12 +3891,12 @@
aname->flags = cols [MONO_ASSEMBLYREF_FLAGS];
aname->versioncompat = 1; /* SameMachine (default) */
aname->hashalg = ASSEMBLY_HASH_SHA1; /* SHA1 (default) */
- aname->version = create_version (domain, aname->major,
aname->minor, aname->build, aname->revision);
+ MONO_OBJECT_SETREF (aname, version, create_version (domain,
aname->major, aname->minor, aname->build, aname->revision));
if (create_culture) {
gpointer args [1];
args [0] = mono_string_new (domain,
mono_metadata_string_heap (image, cols [MONO_ASSEMBLYREF_CULTURE]));
- aname->cultureInfo = mono_runtime_invoke
(create_culture, NULL, args, NULL);
+ MONO_OBJECT_SETREF (aname, cultureInfo,
mono_runtime_invoke (create_culture, NULL, args, NULL));
}
if (cols [MONO_ASSEMBLYREF_PUBLIC_KEY]) {
@@ -3906,10 +3906,10 @@
if ((cols [MONO_ASSEMBLYREF_FLAGS] &
ASSEMBLYREF_FULL_PUBLIC_KEY_FLAG)) {
/* public key token isn't copied - the class
library will
automatically generate it from the public key
if required */
- aname->publicKey = mono_array_new (domain,
mono_defaults.byte_class, pkey_len);
+ MONO_OBJECT_SETREF (aname, publicKey,
mono_array_new (domain, mono_defaults.byte_class, pkey_len));
memcpy (mono_array_addr (aname->publicKey,
guint8, 0), pkey_ptr, pkey_len);
} else {
- aname->keyToken = mono_array_new (domain,
mono_defaults.byte_class, pkey_len);
+ MONO_OBJECT_SETREF (aname, keyToken,
mono_array_new (domain, mono_defaults.byte_class, pkey_len));
memcpy (mono_array_addr (aname->keyToken,
guint8, 0), pkey_ptr, pkey_len);
}
}
@@ -4047,7 +4047,7 @@
table = &assembly->assembly->image->tables
[MONO_TABLE_FILE];
mono_metadata_decode_row (table, i - 1, file_cols,
MONO_FILE_SIZE);
val = mono_metadata_string_heap
(assembly->assembly->image, file_cols [MONO_FILE_NAME]);
- info->filename = mono_string_new (mono_object_domain
(assembly), val);
+ MONO_OBJECT_SETREF (info, filename, mono_string_new
(mono_object_domain (assembly), val));
if (file_cols [MONO_FILE_FLAGS] &&
FILE_CONTAINS_NO_METADATA)
info->location = 0;
else
@@ -4063,7 +4063,7 @@
g_free (msg);
mono_raise_exception (ex);
}
- info->assembly = mono_assembly_get_object
(mono_domain_get (), assembly->assembly->image->references [i - 1]);
+ MONO_OBJECT_SETREF (info, assembly,
mono_assembly_get_object (mono_domain_get (),
assembly->assembly->image->references [i - 1]));
/* Obtain info recursively */
ves_icall_System_Reflection_Assembly_GetManifestResourceInfoInternal
(info->assembly, name, info);
@@ -4293,18 +4293,18 @@
MONO_ARCH_SAVE_REGS;
- aname->name = mono_string_new (domain, name->name);
+ MONO_OBJECT_SETREF (aname, name, mono_string_new (domain, name->name));
aname->major = name->major;
aname->minor = name->minor;
aname->build = name->build;
aname->revision = name->revision;
aname->hashalg = name->hash_alg;
if (by_default_version)
- aname->version = create_version (domain, name->major,
name->minor, name->build, name->revision);
+ MONO_OBJECT_SETREF (aname, version, create_version (domain,
name->major, name->minor, name->build, name->revision));
codebase = g_filename_to_uri (absolute, NULL, NULL);
if (codebase) {
- aname->codebase = mono_string_new (domain, codebase);
+ MONO_OBJECT_SETREF (aname, codebase, mono_string_new (domain,
codebase));
g_free (codebase);
}
@@ -4317,14 +4317,14 @@
if (name->culture) {
args [0] = mono_string_new (domain, name->culture);
- aname->cultureInfo = mono_runtime_invoke (create_culture, NULL,
args, NULL);
+ MONO_OBJECT_SETREF (aname, cultureInfo, mono_runtime_invoke
(create_culture, NULL, args, NULL));
}
if (name->public_key) {
pkey_ptr = (char*)name->public_key;
pkey_len = mono_metadata_decode_blob_size (pkey_ptr, &pkey_ptr);
- aname->publicKey = mono_array_new (domain,
mono_defaults.byte_class, pkey_len);
+ MONO_OBJECT_SETREF (aname, publicKey, mono_array_new (domain,
mono_defaults.byte_class, pkey_len));
memcpy (mono_array_addr (aname->publicKey, guint8, 0),
pkey_ptr, pkey_len);
}
@@ -4333,7 +4333,7 @@
int i, j;
char *p;
- aname->keyToken = mono_array_new (domain,
mono_defaults.byte_class, 8);
+ MONO_OBJECT_SETREF (aname, keyToken, mono_array_new (domain,
mono_defaults.byte_class, 8));
p = mono_array_addr (aname->keyToken, char, 0);
for (i = 0, j = 0; i < 8; i++) {
@@ -5390,7 +5390,7 @@
res = mono_object_new (domain, mono_defaults.transparent_proxy_class);
tp = (MonoTransparentProxy*) res;
- tp->rp = rp;
+ MONO_OBJECT_SETREF (tp, rp, rp);
type = ((MonoReflectionType *)rp->class_to_proxy)->type;
klass = mono_class_from_mono_type (type);
Modified: trunk/mono/mono/metadata/locales.c
===================================================================
--- trunk/mono/mono/metadata/locales.c 2006-03-21 14:16:07 UTC (rev 58218)
+++ trunk/mono/mono/metadata/locales.c 2006-03-21 14:59:26 UTC (rev 58219)
@@ -152,33 +152,33 @@
domain = mono_domain_get ();
- datetime->AbbreviatedDayNames = create_names_array_idx
(dfe->abbreviated_day_names,
- NUM_DAYS);
- datetime->AbbreviatedMonthNames = create_names_array_idx
(dfe->abbreviated_month_names,
- NUM_MONTHS);
- datetime->AMDesignator = mono_string_new (domain, idx2string
(dfe->am_designator));
+ MONO_OBJECT_SETREF (datetime, AbbreviatedDayNames,
create_names_array_idx (dfe->abbreviated_day_names,
+ NUM_DAYS));
+ MONO_OBJECT_SETREF (datetime, AbbreviatedMonthNames,
create_names_array_idx (dfe->abbreviated_month_names,
+ NUM_MONTHS));
+ MONO_OBJECT_SETREF (datetime, AMDesignator, mono_string_new (domain,
idx2string (dfe->am_designator)));
datetime->CalendarWeekRule = dfe->calendar_week_rule;
- datetime->DateSeparator = mono_string_new (domain, idx2string
(dfe->date_separator));
- datetime->DayNames = create_names_array_idx (dfe->day_names, NUM_DAYS);
+ MONO_OBJECT_SETREF (datetime, DateSeparator, mono_string_new (domain,
idx2string (dfe->date_separator)));
+ MONO_OBJECT_SETREF (datetime, DayNames, create_names_array_idx
(dfe->day_names, NUM_DAYS));
datetime->FirstDayOfWeek = dfe->first_day_of_week;
- datetime->FullDateTimePattern = mono_string_new (domain, idx2string
(dfe->full_date_time_pattern));
- datetime->LongDatePattern = mono_string_new (domain, idx2string
(dfe->long_date_pattern));
- datetime->LongTimePattern = mono_string_new (domain, idx2string
(dfe->long_time_pattern));
- datetime->MonthDayPattern = mono_string_new (domain, idx2string
(dfe->month_day_pattern));
- datetime->MonthNames = create_names_array_idx (dfe->month_names,
NUM_MONTHS);
- datetime->PMDesignator = mono_string_new (domain, idx2string
(dfe->pm_designator));
- datetime->ShortDatePattern = mono_string_new (domain, idx2string
(dfe->short_date_pattern));
- datetime->ShortTimePattern = mono_string_new (domain, idx2string
(dfe->short_time_pattern));
- datetime->TimeSeparator = mono_string_new (domain, idx2string
(dfe->time_separator));
- datetime->YearMonthPattern = mono_string_new (domain, idx2string
(dfe->year_month_pattern));
- datetime->ShortDatePatterns = create_names_array_idx
(dfe->short_date_patterns,
- NUM_SHORT_DATE_PATTERNS);
- datetime->LongDatePatterns = create_names_array_idx
(dfe->long_date_patterns,
- NUM_LONG_DATE_PATTERNS);
- datetime->ShortTimePatterns = create_names_array_idx
(dfe->short_time_patterns,
- NUM_SHORT_TIME_PATTERNS);
- datetime->LongTimePatterns = create_names_array_idx
(dfe->long_time_patterns,
- NUM_LONG_TIME_PATTERNS);
+ MONO_OBJECT_SETREF (datetime, FullDateTimePattern, mono_string_new
(domain, idx2string (dfe->full_date_time_pattern)));
+ MONO_OBJECT_SETREF (datetime, LongDatePattern, mono_string_new (domain,
idx2string (dfe->long_date_pattern)));
+ MONO_OBJECT_SETREF (datetime, LongTimePattern, mono_string_new (domain,
idx2string (dfe->long_time_pattern)));
+ MONO_OBJECT_SETREF (datetime, MonthDayPattern, mono_string_new (domain,
idx2string (dfe->month_day_pattern)));
+ MONO_OBJECT_SETREF (datetime, MonthNames, create_names_array_idx
(dfe->month_names, NUM_MONTHS));
+ MONO_OBJECT_SETREF (datetime, PMDesignator, mono_string_new (domain,
idx2string (dfe->pm_designator)));
+ MONO_OBJECT_SETREF (datetime, ShortDatePattern, mono_string_new
(domain, idx2string (dfe->short_date_pattern)));
+ MONO_OBJECT_SETREF (datetime, ShortTimePattern, mono_string_new
(domain, idx2string (dfe->short_time_pattern)));
+ MONO_OBJECT_SETREF (datetime, TimeSeparator, mono_string_new (domain,
idx2string (dfe->time_separator)));
+ MONO_OBJECT_SETREF (datetime, YearMonthPattern, mono_string_new
(domain, idx2string (dfe->year_month_pattern)));
+ MONO_OBJECT_SETREF (datetime, ShortDatePatterns, create_names_array_idx
(dfe->short_date_patterns,
+ NUM_SHORT_DATE_PATTERNS));
+ MONO_OBJECT_SETREF (datetime, LongDatePatterns, create_names_array_idx
(dfe->long_date_patterns,
+ NUM_LONG_DATE_PATTERNS));
+ MONO_OBJECT_SETREF (datetime, ShortTimePatterns, create_names_array_idx
(dfe->short_time_patterns,
+ NUM_SHORT_TIME_PATTERNS));
+ MONO_OBJECT_SETREF (datetime, LongTimePatterns, create_names_array_idx
(dfe->long_time_patterns,
+ NUM_LONG_TIME_PATTERNS));
}
@@ -199,40 +199,40 @@
domain = mono_domain_get ();
number->currencyDecimalDigits = nfe->currency_decimal_digits;
- number->currencyDecimalSeparator = mono_string_new (domain,
- idx2string (nfe->currency_decimal_separator));
- number->currencyGroupSeparator = mono_string_new (domain,
- idx2string (nfe->currency_group_separator));
- number->currencyGroupSizes = create_group_sizes_array
(nfe->currency_group_sizes,
- GROUP_SIZE);
+ MONO_OBJECT_SETREF (number, currencyDecimalSeparator, mono_string_new
(domain,
+ idx2string (nfe->currency_decimal_separator)));
+ MONO_OBJECT_SETREF (number, currencyGroupSeparator, mono_string_new
(domain,
+ idx2string (nfe->currency_group_separator)));
+ MONO_OBJECT_SETREF (number, currencyGroupSizes,
create_group_sizes_array (nfe->currency_group_sizes,
+ GROUP_SIZE));
number->currencyNegativePattern = nfe->currency_negative_pattern;
number->currencyPositivePattern = nfe->currency_positive_pattern;
- number->currencySymbol = mono_string_new (domain, idx2string
(nfe->currency_symbol));
- number->naNSymbol = mono_string_new (domain, idx2string
(nfe->nan_symbol));
- number->negativeInfinitySymbol = mono_string_new (domain,
- idx2string (nfe->negative_infinity_symbol));
- number->negativeSign = mono_string_new (domain, idx2string
(nfe->negative_sign));
+ MONO_OBJECT_SETREF (number, currencySymbol, mono_string_new (domain,
idx2string (nfe->currency_symbol)));
+ MONO_OBJECT_SETREF (number, naNSymbol, mono_string_new (domain,
idx2string (nfe->nan_symbol)));
+ MONO_OBJECT_SETREF (number, negativeInfinitySymbol, mono_string_new
(domain,
+ idx2string (nfe->negative_infinity_symbol)));
+ MONO_OBJECT_SETREF (number, negativeSign, mono_string_new (domain,
idx2string (nfe->negative_sign)));
number->numberDecimalDigits = nfe->number_decimal_digits;
- number->numberDecimalSeparator = mono_string_new (domain,
- idx2string (nfe->number_decimal_separator));
- number->numberGroupSeparator = mono_string_new (domain, idx2string
(nfe->number_group_separator));
- number->numberGroupSizes = create_group_sizes_array
(nfe->number_group_sizes,
- GROUP_SIZE);
+ MONO_OBJECT_SETREF (number, numberDecimalSeparator, mono_string_new
(domain,
+ idx2string (nfe->number_decimal_separator)));
+ MONO_OBJECT_SETREF (number, numberGroupSeparator, mono_string_new
(domain, idx2string (nfe->number_group_separator)));
+ MONO_OBJECT_SETREF (number, numberGroupSizes, create_group_sizes_array
(nfe->number_group_sizes,
+ GROUP_SIZE));
number->numberNegativePattern = nfe->number_negative_pattern;
number->percentDecimalDigits = nfe->percent_decimal_digits;
- number->percentDecimalSeparator = mono_string_new (domain,
- idx2string (nfe->percent_decimal_separator));
- number->percentGroupSeparator = mono_string_new (domain,
- idx2string (nfe->percent_group_separator));
- number->percentGroupSizes = create_group_sizes_array
(nfe->percent_group_sizes,
- GROUP_SIZE);
+ MONO_OBJECT_SETREF (number, percentDecimalSeparator, mono_string_new
(domain,
+ idx2string (nfe->percent_decimal_separator)));
+ MONO_OBJECT_SETREF (number, percentGroupSeparator, mono_string_new
(domain,
+ idx2string (nfe->percent_group_separator)));
+ MONO_OBJECT_SETREF (number, percentGroupSizes, create_group_sizes_array
(nfe->percent_group_sizes,
+ GROUP_SIZE));
number->percentNegativePattern = nfe->percent_negative_pattern;
number->percentPositivePattern = nfe->percent_positive_pattern;
- number->percentSymbol = mono_string_new (domain, idx2string
(nfe->percent_symbol));
- number->perMilleSymbol = mono_string_new (domain, idx2string
(nfe->per_mille_symbol));
- number->positiveInfinitySymbol = mono_string_new (domain,
- idx2string (nfe->positive_infinity_symbol));
- number->positiveSign = mono_string_new (domain, idx2string
(nfe->positive_sign));
+ MONO_OBJECT_SETREF (number, percentSymbol, mono_string_new (domain,
idx2string (nfe->percent_symbol)));
+ MONO_OBJECT_SETREF (number, perMilleSymbol, mono_string_new (domain,
idx2string (nfe->per_mille_symbol)));
+ MONO_OBJECT_SETREF (number, positiveInfinitySymbol, mono_string_new
(domain,
+ idx2string (nfe->positive_infinity_symbol)));
+ MONO_OBJECT_SETREF (number, positiveSign, mono_string_new (domain,
idx2string (nfe->positive_sign)));
}
static MonoBoolean
@@ -241,14 +241,14 @@
MonoDomain *domain = mono_domain_get ();
this->lcid = ci->lcid;
- this->name = mono_string_new (domain, idx2string (ci->name));
- this->icu_name = mono_string_new (domain, idx2string (ci->icu_name));
- this->displayname = mono_string_new (domain, idx2string
(ci->displayname));
- this->englishname = mono_string_new (domain, idx2string
(ci->englishname));
- this->nativename = mono_string_new (domain, idx2string
(ci->nativename));
- this->win3lang = mono_string_new (domain, idx2string (ci->win3lang));
- this->iso3lang = mono_string_new (domain, idx2string (ci->iso3lang));
- this->iso2lang = mono_string_new (domain, idx2string (ci->iso2lang));
+ MONO_OBJECT_SETREF (this, name, mono_string_new (domain, idx2string
(ci->name)));
+ MONO_OBJECT_SETREF (this, icu_name, mono_string_new (domain, idx2string
(ci->icu_name)));
+ MONO_OBJECT_SETREF (this, displayname, mono_string_new (domain,
idx2string (ci->displayname)));
+ MONO_OBJECT_SETREF (this, englishname, mono_string_new (domain,
idx2string (ci->englishname)));
+ MONO_OBJECT_SETREF (this, nativename, mono_string_new (domain,
idx2string (ci->nativename)));
+ MONO_OBJECT_SETREF (this, win3lang, mono_string_new (domain, idx2string
(ci->win3lang)));
+ MONO_OBJECT_SETREF (this, iso3lang, mono_string_new (domain, idx2string
(ci->iso3lang)));
+ MONO_OBJECT_SETREF (this, iso2lang, mono_string_new (domain, idx2string
(ci->iso2lang)));
this->parent_lcid = ci->parent_lcid;
this->specific_lcid = ci->specific_lcid;
this->datetime_index = ci->datetime_format_index;
@@ -265,13 +265,13 @@
MonoDomain *domain = mono_domain_get ();
this->region_id = ri->region_id;
- this->iso2name = mono_string_new (domain, idx2string (ri->iso2name));
- this->iso3name = mono_string_new (domain, idx2string (ri->iso3name));
- this->win3name = mono_string_new (domain, idx2string (ri->win3name));
- this->english_name = mono_string_new (domain, idx2string
(ri->english_name));
- this->currency_symbol = mono_string_new (domain, idx2string
(ri->currency_symbol));
- this->iso_currency_symbol = mono_string_new (domain, idx2string
(ri->iso_currency_symbol));
- this->currency_english_name = mono_string_new (domain, idx2string
(ri->currency_english_name));
+ MONO_OBJECT_SETREF (this, iso2name, mono_string_new (domain, idx2string
(ri->iso2name)));
+ MONO_OBJECT_SETREF (this, iso3name, mono_string_new (domain, idx2string
(ri->iso3name)));
+ MONO_OBJECT_SETREF (this, win3name, mono_string_new (domain, idx2string
(ri->win3name)));
+ MONO_OBJECT_SETREF (this, english_name, mono_string_new (domain,
idx2string (ri->english_name)));
+ MONO_OBJECT_SETREF (this, currency_symbol, mono_string_new (domain,
idx2string (ri->currency_symbol)));
+ MONO_OBJECT_SETREF (this, iso_currency_symbol, mono_string_new (domain,
idx2string (ri->iso_currency_symbol)));
+ MONO_OBJECT_SETREF (this, currency_english_name, mono_string_new
(domain, idx2string (ri->currency_english_name)));
return TRUE;
}
@@ -673,7 +673,7 @@
mono_array_set (arr, guint8, i, mono_string_chars (source)[i]);
}
- key->key=arr;
+ MONO_OBJECT_SETREF (key, key, arr);
}
int ves_icall_System_Globalization_CompareInfo_internal_index (MonoCompareInfo
*this, MonoString *source, gint32 sindex, gint32 count, MonoString *value,
gint32 options, MonoBoolean first)
Modified: trunk/mono/mono/metadata/marshal.c
===================================================================
--- trunk/mono/mono/metadata/marshal.c 2006-03-21 14:16:07 UTC (rev 58218)
+++ trunk/mono/mono/metadata/marshal.c 2006-03-21 14:59:26 UTC (rev 58219)
@@ -388,7 +388,7 @@
if (!error) {
if (! sb->str || sb->str == sb->cached_str) {
- sb->str = mono_string_new_size (mono_domain_get (),
items_written);
+ MONO_OBJECT_SETREF (sb, str, mono_string_new_size
(mono_domain_get (), items_written));
sb->cached_str = NULL;
}
@@ -452,14 +452,14 @@
* we need to alloc a buffer of the default capacity in this case.
*/
if (! sb->str)
- sb->str = mono_string_new_size (mono_domain_get (),
mono_stringbuilder_capacity (sb));
+ MONO_OBJECT_SETREF (sb, str, mono_string_new_size
(mono_domain_get (), mono_stringbuilder_capacity (sb)));
/*
* The stringbuilder might not have ownership of this string. If this is
* the case, we must duplicate the string, so that we don't munge
immutable
* strings
*/
else if (sb->str == sb->cached_str) {
- sb->str = mono_string_new_utf16 (mono_domain_get (),
mono_string_chars (sb->str), mono_stringbuilder_capacity (sb));
+ MONO_OBJECT_SETREF (sb, str, mono_string_new_utf16
(mono_domain_get (), mono_string_chars (sb->str), mono_stringbuilder_capacity
(sb)));
sb->cached_str = NULL;
}
@@ -922,7 +922,7 @@
mono_mb_emit_byte (mb, CEE_DUP);
mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoException,
message));
mono_mb_emit_ldstr (mb, (char*)msg);
- mono_mb_emit_byte (mb, CEE_STIND_I);
+ mono_mb_emit_byte (mb, CEE_STIND_REF);
}
mono_mb_emit_byte (mb, CEE_THROW);
}
@@ -1568,9 +1568,9 @@
msg = mono_method_call_message_new
(mono_marshal_method_from_wrapper (method), params, NULL, &async_callback,
&state);
handle = CreateEvent (NULL, TRUE, FALSE, NULL);
ares = mono_async_result_new (mono_domain_get (),
handle, state, handle);
- ares->async_delegate = (MonoObject *)delegate;
- ares->async_callback = (MonoObject *)async_callback;
- msg->async_result = ares;
+ MONO_OBJECT_SETREF (ares, async_delegate, (MonoObject
*)delegate);
+ MONO_OBJECT_SETREF (ares, async_callback, (MonoObject
*)async_callback);
+ MONO_OBJECT_SETREF (msg, async_result, ares);
msg->call_type = CallType_BeginInvoke;
mono_remoting_invoke ((MonoObject *)tp->rp, msg, &exc,
&out_args);
@@ -1995,7 +1995,7 @@
msg = (MonoMethodMessage *)mono_object_new (domain,
mono_defaults.mono_method_message_class);
mono_message_init (domain, msg, delegate->method_info, NULL);
msg->call_type = CallType_EndInvoke;
- msg->async_result = ares;
+ MONO_OBJECT_SETREF (msg, async_result, ares);
res = mono_remoting_invoke ((MonoObject *)tp->rp, msg, &exc,
&out_args);
}
else
@@ -2007,7 +2007,7 @@
char *tmp;
tmp = g_strdup_printf ("%s\nException Rethrown at:\n",
strace);
g_free (strace);
- ((MonoException*)exc)->stack_trace = mono_string_new
(domain, tmp);
+ MONO_OBJECT_SETREF (((MonoException*)exc), stack_trace,
mono_string_new (domain, tmp));
g_free (tmp);
}
mono_raise_exception ((MonoException*)exc);
@@ -2369,7 +2369,7 @@
if (mono_object_class (val) == mono_defaults.stringbuilder_class) {
MonoStringBuilder *oldsb = (MonoStringBuilder *) val;
MonoStringBuilder *newsb = (MonoStringBuilder *)
mono_object_new (domain, mono_defaults.stringbuilder_class);
- newsb->str = mono_string_new_utf16 (domain, mono_string_chars
(oldsb->str), mono_string_length (oldsb->str));
+ MONO_OBJECT_SETREF (newsb, str, mono_string_new_utf16 (domain,
mono_string_chars (oldsb->str), mono_string_length (oldsb->str)));
newsb->length = oldsb->length;
newsb->max_capacity = (gint32)0x7fffffff;
return (MonoObject *) newsb;
@@ -2410,7 +2410,7 @@
MonoStringBuilder *src_sb = (MonoStringBuilder *) src;
MonoStringBuilder *dst_sb = (MonoStringBuilder *) dst;
- dst_sb->str = mono_string_new_utf16 (mono_object_domain (dst),
mono_string_chars (src_sb->str), mono_string_length (src_sb->str));
+ MONO_OBJECT_SETREF (dst_sb, str, mono_string_new_utf16
(mono_object_domain (dst), mono_string_chars (src_sb->str), mono_string_length
(src_sb->str)));
dst_sb->cached_str = NULL;
dst_sb->length = src_sb->length;
}
@@ -7032,7 +7032,7 @@
/* get the real proxy from the transparent proxy*/
mono_mb_emit_ldarg (mb, 0);
mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoTransparentProxy, rp));
- mono_mb_emit_byte (mb, CEE_LDIND_I);
+ mono_mb_emit_byte (mb, CEE_LDIND_REF);
/* get the refletion type from the type handle */
mono_mb_emit_byte (mb, MONO_CUSTOM_PREFIX);
Modified: trunk/mono/mono/metadata/object.c
===================================================================
--- trunk/mono/mono/metadata/object.c 2006-03-21 14:16:07 UTC (rev 58218)
+++ trunk/mono/mono/metadata/object.c 2006-03-21 14:59:26 UTC (rev 58219)
@@ -2084,10 +2084,10 @@
assembly = method->klass->image->assembly;
domain->entry_assembly = assembly;
- domain->setup->application_base = mono_string_new (domain,
assembly->basedir);
+ MONO_OBJECT_SETREF (domain->setup, application_base,
mono_string_new (domain, assembly->basedir));
str = g_strconcat (assembly->image->name, ".config", NULL);
- domain->setup->configuration_file = mono_string_new (domain,
str);
+ MONO_OBJECT_SETREF (domain->setup, configuration_file,
mono_string_new (domain, str));
g_free (str);
}
@@ -3400,7 +3400,7 @@
*/
if (((MonoObject*)ex)->vtable->klass ==
mono_defaults.threadabortexception_class)
- mono_thread_current ()->abort_exc = ex;
+ MONO_OBJECT_SETREF (mono_thread_current (), abort_exc, ex);
ex_handler (ex);
}
@@ -3443,14 +3443,14 @@
/* we must capture the execution context from the original thread */
if (method) {
- res->execution_context = mono_runtime_invoke (method, NULL,
NULL, NULL);
+ MONO_OBJECT_SETREF (res, execution_context, mono_runtime_invoke
(method, NULL, NULL, NULL));
/* note: result may be null if the flow is suppressed */
}
res->data = data;
- res->async_state = state;
+ MONO_OBJECT_SETREF (res, async_state, state);
if (handle != NULL)
- res->handle = (MonoObject *) mono_wait_handle_new (domain,
handle);
+ MONO_OBJECT_SETREF (res, handle, (MonoObject *)
mono_wait_handle_new (domain, handle));
res->sync_completed = FALSE;
res->completed = FALSE;
@@ -3470,16 +3470,16 @@
char **names;
guint8 arg_type;
- this->method = method;
+ MONO_OBJECT_SETREF (this, method, method);
- this->args = mono_array_new (domain, mono_defaults.object_class,
sig->param_count);
- this->arg_types = mono_array_new (domain, mono_defaults.byte_class,
sig->param_count);
+ MONO_OBJECT_SETREF (this, args, mono_array_new (domain,
mono_defaults.object_class, sig->param_count));
+ MONO_OBJECT_SETREF (this, arg_types, mono_array_new (domain,
mono_defaults.byte_class, sig->param_count));
this->async_result = NULL;
this->call_type = CallType_Sync;
names = g_new (char *, sig->param_count);
mono_method_get_param_names (method->method, (const char **) names);
- this->names = mono_array_new (domain, mono_defaults.string_class,
sig->param_count);
+ MONO_OBJECT_SETREF (this, names, mono_array_new (domain,
mono_defaults.string_class, sig->param_count));
for (i = 0; i < sig->param_count; i++) {
name = mono_string_new (domain, names [i]);
@@ -3573,6 +3573,7 @@
outarg_count++;
}
+ /* FIXME: GC ensure we insert a write barrier for out_args, maybe in
the caller? */
*out_args = mono_array_new (domain, mono_defaults.object_class,
outarg_count);
*exc = NULL;
@@ -3658,18 +3659,18 @@
if ((ji = mono_jit_info_table_find (domain, mono_get_addr_from_ftnptr
(addr)))) {
method = ji->method;
- delegate->method_info = mono_method_get_object (domain, method,
NULL);
+ MONO_OBJECT_SETREF (delegate, method_info,
mono_method_get_object (domain, method, NULL));
}
if (target && target->vtable->klass ==
mono_defaults.transparent_proxy_class) {
g_assert (method);
method = mono_marshal_get_remoting_invoke (method);
delegate->method_ptr = mono_compile_method (method);
- delegate->target = target;
+ MONO_OBJECT_SETREF (delegate, target, target);
} else if (mono_method_signature (method)->hasthis &&
method->klass->valuetype) {
method = mono_marshal_get_unbox_wrapper (method);
delegate->method_ptr = mono_compile_method (method);
- delegate->target = target;
+ MONO_OBJECT_SETREF (delegate, target, target);
} else {
if (method) {
/*
@@ -3680,7 +3681,7 @@
addr = arch_create_delegate_trampoline (method, addr);
}
delegate->method_ptr = addr;
- delegate->target = target;
+ MONO_OBJECT_SETREF (delegate, target, target);
}
}
@@ -3865,7 +3866,7 @@
if (mono_array_length (out_args) == 0)
return NULL;
- *res = mono_array_get (out_args, MonoObject *, 0);
+ *res = mono_array_get (out_args, MonoObject *, 0); /* FIXME: GC write
abrrier for res */
if (field_class->valuetype) {
return ((char *)*res) + sizeof (MonoObject);
Modified: trunk/mono/mono/metadata/object.h
===================================================================
--- trunk/mono/mono/metadata/object.h 2006-03-21 14:16:07 UTC (rev 58218)
+++ trunk/mono/mono/metadata/object.h 2006-03-21 14:59:26 UTC (rev 58219)
@@ -56,6 +56,10 @@
#define mono_object_class(obj) (((MonoObject*)(obj))->vtable->klass)
#define mono_object_domain(obj) (((MonoObject*)(obj))->vtable->domain)
+#define MONO_OBJECT_SETREF(obj,fieldname,value) do { \
+ (obj)->fieldname = (value); \
+ } while (0)
+
#define mono_array_length(array) ((array)->max_length)
#define mono_array_addr(array,type,index) ((type*)(gpointer)
mono_array_addr_with_size (array, sizeof (type), index))
#define mono_array_addr_with_size(array,size,index) ( ((char*)(array)->vector)
+ (size) * (index) )
Modified: trunk/mono/mono/metadata/reflection.c
===================================================================
--- trunk/mono/mono/metadata/reflection.c 2006-03-21 14:16:07 UTC (rev
58218)
+++ trunk/mono/mono/metadata/reflection.c 2006-03-21 14:59:26 UTC (rev
58219)
@@ -2028,7 +2028,7 @@
entry = g_new0 (GenericParamTableEntry, 1);
entry->owner = owner;
- entry->gparam = gparam;
+ entry->gparam = gparam; /* FIXME: GC object stored in unmanaged mem */
g_ptr_array_add (assembly->gen_params, entry);
}
@@ -2908,7 +2908,7 @@
{
int i;
- g_ptr_array_add (types, type);
+ g_ptr_array_add (types, type); /* FIXME: GC object added to unmanaged
memory */
if (!type->subtypes)
return;
@@ -5250,11 +5250,12 @@
res = (MonoReflectionModule *)mono_object_new (domain,
System_Reflection_Module);
res->image = image;
- res->assembly = (MonoReflectionAssembly *)
mono_assembly_get_object(domain, image->assembly);
+ MONO_OBJECT_SETREF (res, assembly, (MonoReflectionAssembly *)
mono_assembly_get_object(domain, image->assembly));
- res->fqname = mono_string_new (domain, image->name);
- res->name = mono_string_new (domain, basename =
g_path_get_basename (image->name));
- res->scopename = mono_string_new (domain, image->module_name);
+ MONO_OBJECT_SETREF (res, fqname, mono_string_new (domain, image->name));
+ basename = g_path_get_basename (image->name);
+ MONO_OBJECT_SETREF (res, name, mono_string_new (domain, basename));
+ MONO_OBJECT_SETREF (res, scopename, mono_string_new (domain,
image->module_name));
g_free (basename);
@@ -5296,8 +5297,8 @@
g_assert (table_index < table->rows);
mono_metadata_decode_row (table, table_index, cols, MONO_FILE_SIZE);
- res->image = 0;
- res->assembly = (MonoReflectionAssembly *)
mono_assembly_get_object(domain, image->assembly);
+ res->image = NULL;
+ MONO_OBJECT_SETREF (res, assembly, (MonoReflectionAssembly *)
mono_assembly_get_object(domain, image->assembly));
name = mono_metadata_string_heap (image, cols [MONO_FILE_NAME]);
/* Check whenever the row has a corresponding row in the moduleref
table */
@@ -5309,9 +5310,9 @@
res->image = image->modules [i];
}
- res->fqname = mono_string_new (domain, name);
- res->name = mono_string_new (domain, name);
- res->scopename = mono_string_new (domain, name);
+ MONO_OBJECT_SETREF (res, fqname, mono_string_new (domain, name));
+ MONO_OBJECT_SETREF (res, name, mono_string_new (domain, name));
+ MONO_OBJECT_SETREF (res, scopename, mono_string_new (domain, name));
res->is_resource = cols [MONO_FILE_FLAGS] && FILE_CONTAINS_NO_METADATA;
res->token = mono_metadata_make_token (MONO_TABLE_FILE, table_index +
1);
@@ -5434,9 +5435,9 @@
res->type.type = geninst;
if (gklass->wastypebuilder && gklass->reflection_info)
- res->generic_type = gklass->reflection_info;
+ MONO_OBJECT_SETREF (res, generic_type, gklass->reflection_info);
else
- res->generic_type = mono_type_get_object (domain,
&gklass->byval_arg);
+ MONO_OBJECT_SETREF (res, generic_type, mono_type_get_object
(domain, &gklass->byval_arg));
return res;
}
@@ -5552,8 +5553,8 @@
gret = (MonoReflectionGenericMethod*)mono_object_new (domain,
klass);
gret->method.method = method;
- gret->method.name = mono_string_new (domain, method->name);
- gret->method.reftype = mono_type_get_object (domain,
&refclass->byval_arg);
+ MONO_OBJECT_SETREF (gret, method.name, mono_string_new (domain,
method->name));
+ MONO_OBJECT_SETREF (gret, method.reftype, mono_type_get_object
(domain, &refclass->byval_arg));
CACHE_OBJECT (MonoReflectionMethod *, method,
(MonoReflectionMethod*)gret, refclass);
}
@@ -5569,8 +5570,8 @@
ret = (MonoReflectionMethod*)mono_object_new (domain, klass);
ret->method = method;
- ret->name = mono_string_new (domain, method->name);
- ret->reftype = mono_type_get_object (domain, &refclass->byval_arg);
+ MONO_OBJECT_SETREF (ret, name, mono_string_new (domain, method->name));
+ MONO_OBJECT_SETREF (ret, reftype, mono_type_get_object (domain,
&refclass->byval_arg));
CACHE_OBJECT (MonoReflectionMethod *, method, ret, refclass);
}
@@ -5594,12 +5595,12 @@
res = (MonoReflectionField *)mono_object_new (domain, oklass);
res->klass = klass;
res->field = field;
- res->name = mono_string_new (domain, field->name);
+ MONO_OBJECT_SETREF (res, name, mono_string_new (domain, field->name));
if (field->generic_info)
res->attrs = field->generic_info->generic_type->attrs;
else
res->attrs = field->type->attrs;
- res->type = mono_type_get_object (domain, field->type);
+ MONO_OBJECT_SETREF (res, type, mono_type_get_object (domain,
field->type));
CACHE_OBJECT (MonoReflectionField *, field, res, klass);
}
@@ -5693,14 +5694,14 @@
res = mono_array_new (domain, System_Reflection_ParameterInfo,
mono_method_signature (method)->param_count);
for (i = 0; i < mono_method_signature (method)->param_count; ++i) {
param = (MonoReflectionParameter *)mono_object_new (domain,
System_Reflection_ParameterInfo);
- param->ClassImpl = mono_type_get_object (domain,
mono_method_signature (method)->params [i]);
- param->MemberImpl = (MonoObject*)member;
- param->NameImpl = mono_string_new (domain, names [i]);
+ MONO_OBJECT_SETREF (param, ClassImpl, mono_type_get_object
(domain, mono_method_signature (method)->params [i]));
+ MONO_OBJECT_SETREF (param, MemberImpl, (MonoObject*)member);
+ MONO_OBJECT_SETREF (param, NameImpl, mono_string_new (domain,
names [i]));
param->PositionImpl = i;
param->AttrsImpl = mono_method_signature (method)->params
[i]->attrs;
if (!(param->AttrsImpl & PARAM_ATTRIBUTE_HAS_DEFAULT)) {
- param->DefaultValueImpl = dbnull;
+ MONO_OBJECT_SETREF (param, DefaultValueImpl, dbnull);
} else {
if (!blobs) {
@@ -5719,16 +5720,16 @@
else
type->data.klass = mono_class_from_mono_type
(type);
- param->DefaultValueImpl = mono_get_object_from_blob
(domain, type, blobs [i]);
+ MONO_OBJECT_SETREF (param, DefaultValueImpl,
mono_get_object_from_blob (domain, type, blobs [i]));
/* Type in the Constant table is MONO_TYPE_CLASS for
nulls */
if (types [i] != MONO_TYPE_CLASS &&
!param->DefaultValueImpl)
- param->DefaultValueImpl = dbnull;
+ MONO_OBJECT_SETREF (param, DefaultValueImpl,
dbnull);
}
if (mspecs [i + 1])
- param->MarshalAsImpl =
(MonoObject*)mono_reflection_marshal_from_marshal_spec (domain, method->klass,
mspecs [i + 1]);
+ MONO_OBJECT_SETREF (param, MarshalAsImpl,
(MonoObject*)mono_reflection_marshal_from_marshal_spec (domain, method->klass,
mspecs [i + 1]));
mono_array_setref (res, i, param);
}
@@ -5808,21 +5809,21 @@
ret->init_locals = header->init_locals;
ret->max_stack = header->max_stack;
ret->local_var_sig_token = local_var_sig_token;
- ret->il = mono_array_new (domain, mono_defaults.byte_class,
header->code_size);
+ MONO_OBJECT_SETREF (ret, il, mono_array_new (domain,
mono_defaults.byte_class, header->code_size));
memcpy (mono_array_addr (ret->il, guint8, 0), header->code,
header->code_size);
/* Locals */
- ret->locals = mono_array_new (domain,
System_Reflection_LocalVariableInfo, header->num_locals);
+ MONO_OBJECT_SETREF (ret, locals, mono_array_new (domain,
System_Reflection_LocalVariableInfo, header->num_locals));
for (i = 0; i < header->num_locals; ++i) {
MonoReflectionLocalVariableInfo *info =
(MonoReflectionLocalVariableInfo*)mono_object_new (domain,
System_Reflection_LocalVariableInfo);
- info->local_type = mono_type_get_object (domain, header->locals
[i]);
+ MONO_OBJECT_SETREF (info, local_type, mono_type_get_object
(domain, header->locals [i]));
info->is_pinned = header->locals [i]->pinned;
info->local_index = i;
mono_array_setref (ret->locals, i, info);
}
/* Exceptions */
- ret->clauses = mono_array_new (domain,
System_Reflection_ExceptionHandlingClause, header->num_clauses);
+ MONO_OBJECT_SETREF (ret, clauses, mono_array_new (domain,
System_Reflection_ExceptionHandlingClause, header->num_clauses));
for (i = 0; i < header->num_clauses; ++i) {
MonoReflectionExceptionHandlingClause *info =
(MonoReflectionExceptionHandlingClause*)mono_object_new (domain,
System_Reflection_ExceptionHandlingClause);
MonoExceptionClause *clause = &header->clauses [i];
@@ -5835,7 +5836,7 @@
if (clause->flags == MONO_EXCEPTION_CLAUSE_FILTER)
info->filter_offset = clause->data.filter_offset;
else if (clause->data.catch_class)
- info->catch_type = mono_type_get_object
(mono_domain_get (), &clause->data.catch_class->byval_arg);
+ MONO_OBJECT_SETREF (info, catch_type,
mono_type_get_object (mono_domain_get (),
&clause->data.catch_class->byval_arg));
mono_array_setref (ret->clauses, i, info);
}
@@ -8006,7 +8007,7 @@
klass->flags = tb->attrs;
klass->element_class = klass;
- klass->reflection_info = tb; /* need to pin. */
+ klass->reflection_info = tb; /* FIXME: GC need to pin. */
/* Put into cache so mono_class_get () will find it */
mono_image_add_to_name_cache (klass->image, klass->name_space,
klass->name, tb->table_idx);
@@ -8235,12 +8236,12 @@
if (spec->data.custom_data.custom_name) {
mtype = mono_reflection_type_from_name
(spec->data.custom_data.custom_name, klass->image);
if (mtype)
- minfo->marshaltyperef = mono_type_get_object
(domain, mtype);
+ MONO_OBJECT_SETREF (minfo, marshaltyperef,
mono_type_get_object (domain, mtype));
- minfo->marshaltype = mono_string_new (domain,
spec->data.custom_data.custom_name);
+ MONO_OBJECT_SETREF (minfo, marshaltype, mono_string_new
(domain, spec->data.custom_data.custom_name));
}
if (spec->data.custom_data.cookie)
- minfo->mcookie = mono_string_new (domain,
spec->data.custom_data.cookie);
+ MONO_OBJECT_SETREF (minfo, mcookie, mono_string_new
(domain, spec->data.custom_data.cookie));
break;
default:
@@ -8533,7 +8534,7 @@
field->type = fb->type->type;
}
if ((fb->attrs & FIELD_ATTRIBUTE_HAS_FIELD_RVA) && fb->rva_data)
- field->data = mono_array_addr (fb->rva_data, char, 0);
+ field->data = mono_array_addr (fb->rva_data, char, 0); /*
FIXME: GC pin array */
if (fb->offset != -1)
field->offset = fb->offset;
field->parent = klass;
@@ -9438,7 +9439,7 @@
image = &gparam->tbuilder->module->dynamic_image->image;
mono_class_from_generic_parameter (param, image, gparam->mbuilder !=
NULL);
- param->pklass->reflection_info = gparam;
+ param->pklass->reflection_info = gparam; /* FIXME: GC pin gparam */
gparam->type.type = g_new0 (MonoType, 1);
gparam->type.type->type = gparam->mbuilder ? MONO_TYPE_MVAR :
MONO_TYPE_VAR;
@@ -9534,7 +9535,7 @@
mono_raise_exception (mono_get_exception_type_load
(NULL, NULL));
return;
}
- rmb.refs [i] = ref;
+ rmb.refs [i] = ref; /* FIXME: GC object stored in unamanged
memory (change also resolve_object() signature) */
rmb.refs [i + 1] = handle_class;
}
Modified: trunk/mono/mono/metadata/threadpool.c
===================================================================
--- trunk/mono/mono/metadata/threadpool.c 2006-03-21 14:16:07 UTC (rev
58218)
+++ trunk/mono/mono/metadata/threadpool.c 2006-03-21 14:59:26 UTC (rev
58219)
@@ -850,7 +850,7 @@
socket_io_add (MonoAsyncResult *ares, MonoSocketAsyncResult *state)
{
socket_io_init (&socket_io_data);
- state->ares = ares;
+ MONO_OBJECT_SETREF (state, ares, ares);
#ifdef HAVE_EPOLL
if (socket_io_data.epoll_disabled == FALSE) {
if (socket_io_add_epoll (state))
@@ -903,8 +903,8 @@
if (ares->execution_context) {
/* use captured ExecutionContext (if available) */
thread = mono_thread_current ();
- ares->original_context = thread->execution_context;
- thread->execution_context = ares->execution_context;
+ MONO_OBJECT_SETREF (ares, original_context,
thread->execution_context);
+ MONO_OBJECT_SETREF (thread, execution_context,
ares->execution_context);
} else {
ares->original_context = NULL;
}
@@ -923,12 +923,12 @@
/* 'exc' will be the previous ac->msg->exc if not NULL and not
* catched. If catched, this will be set to NULL and the
* exception will not be printed. */
- ac->msg->exc = exc;
+ MONO_OBJECT_SETREF (ac->msg, exc, exc);
}
/* restore original thread execution context if flow isn't suppressed,
i.e. non null */
if (ares->original_context) {
- thread->execution_context = ares->original_context;
+ MONO_OBJECT_SETREF (thread, execution_context,
ares->original_context);
ares->original_context = NULL;
}
@@ -993,7 +993,7 @@
}
ares = mono_async_result_new (domain, NULL, ac->state, ac);
- ares->async_delegate = target;
+ MONO_OBJECT_SETREF (ares, async_delegate, target);
EnterCriticalSection (&ares_lock);
mono_g_hash_table_insert (ares_htable, ares, ares);
@@ -1055,7 +1055,7 @@
if (!ares->completed) {
if (ares->handle == NULL) {
ac->wait_event = CreateEvent (NULL, TRUE, FALSE, NULL);
- ares->handle = (MonoObject *) mono_wait_handle_new
(mono_object_domain (ares), ac->wait_event);
+ MONO_OBJECT_SETREF (ares, handle, (MonoObject *)
mono_wait_handle_new (mono_object_domain (ares), ac->wait_event));
}
mono_monitor_exit ((MonoObject *) ares);
WaitForSingleObjectEx (ac->wait_event, INFINITE, TRUE);
@@ -1063,7 +1063,7 @@
mono_monitor_exit ((MonoObject *) ares);
}
- *exc = ac->msg->exc;
+ *exc = ac->msg->exc; /* FIXME: GC add write barrier */
*out_args = ac->out_args;
return ac->res;
Modified: trunk/mono/mono/metadata/threads.c
===================================================================
--- trunk/mono/mono/metadata/threads.c 2006-03-21 14:16:07 UTC (rev 58218)
+++ trunk/mono/mono/metadata/threads.c 2006-03-21 14:59:26 UTC (rev 58219)
@@ -380,7 +380,7 @@
thread->handle=thread_handle;
thread->tid=tid;
- thread->synch_lock=mono_object_new (domain, mono_defaults.object_class);
+ MONO_OBJECT_SETREF (thread, synch_lock, mono_object_new (domain,
mono_defaults.object_class));
handle_store(thread);
@@ -424,7 +424,7 @@
thread->handle=thread_handle;
thread->tid=tid;
- thread->synch_lock=mono_object_new (domain, mono_defaults.object_class);
+ MONO_OBJECT_SETREF (thread, synch_lock, mono_object_new (domain,
mono_defaults.object_class));
THREAD_DEBUG (g_message ("%s: Attached thread ID %"G_GSIZE_FORMAT"
(handle %p)", __func__, tid, thread_handle));
@@ -503,7 +503,7 @@
/* This is freed in start_wrapper */
start_info = g_new0 (struct StartInfo, 1);
start_info->func = start_func;
- start_info->start_arg = this->start_obj;
+ start_info->start_arg = this->start_obj; /* FIXME: GC object
stored in unmanaged memory */
start_info->delegate = start;
start_info->obj = this;
start_info->domain = mono_domain_get ();
@@ -1554,7 +1554,7 @@
}
thread->state |= ThreadState_AbortRequested;
- thread->abort_state = state;
+ MONO_OBJECT_SETREF (thread, abort_state, state);
thread->abort_exc = NULL;
mono_monitor_exit (thread->synch_lock);
@@ -2725,7 +2725,7 @@
if ((thread->state & ThreadState_AbortRequested) != 0) {
if (thread->abort_exc == NULL)
- thread->abort_exc = mono_get_exception_thread_abort ();
+ MONO_OBJECT_SETREF (thread, abort_exc,
mono_get_exception_thread_abort ());
mono_monitor_exit (thread->synch_lock);
return thread->abort_exc;
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches