Mark mono_object_new external only.
static void
create_domain_objects (MonoDomain *domain)
{
+ MonoError error;
MonoDomain *old_domain = mono_domain_get ();
MonoString *arg;
MonoVTable *string_vt;
domain->stack_overflow_ex = mono_exception_from_name_two_strings (mono_defaults.corlib, "System", "StackOverflowException", arg, NULL);
/*The ephemeron tombstone i*/
- domain->ephemeron_tombstone = mono_object_new (domain, mono_defaults.object_class);
+ domain->ephemeron_tombstone = mono_object_new_checked (domain, mono_defaults.object_class, &error);
+ mono_error_assert_ok (&error);
if (domain != old_domain) {
mono_thread_pop_appdomain_ref ();
MonoClass *klass;
klass = mono_class_from_name (mono_defaults.corlib, "System", "AppDomainSetup");
- setup = (MonoAppDomainSetup *) mono_object_new (mono_domain_get (), klass);
+ setup = (MonoAppDomainSetup *) mono_object_new_checked (mono_domain_get (), klass, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
setup->configuration_file = configuration_file != NULL ? mono_string_new (mono_domain_get (), configuration_file) : NULL;
ad = mono_domain_create_appdomain_internal (friendly_name, setup, &error);
static MonoAppDomainSetup*
copy_app_domain_setup (MonoDomain *domain, MonoAppDomainSetup *setup)
{
+ MonoError error;
MonoDomain *caller_domain = mono_domain_get ();
MonoClass *ads_class = mono_class_from_name (mono_defaults.corlib, "System", "AppDomainSetup");
- MonoAppDomainSetup *copy = (MonoAppDomainSetup*)mono_object_new (domain, ads_class);
+ MonoAppDomainSetup *copy = (MonoAppDomainSetup*)mono_object_new_checked (domain, ads_class, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
mono_domain_set_internal (domain);
/* FIXME: pin all those objects */
data = mono_domain_create();
- ad = (MonoAppDomain *) mono_object_new (data, adclass);
+ ad = (MonoAppDomain *) mono_object_new_checked (data, adclass, error);
+ if (!mono_error_ok (error)) return NULL;
ad->data = data;
data->domain = ad;
data->friendly_name = g_strdup (friendly_name);
mono_exception_from_name_domain (MonoDomain *domain, MonoImage *image,
const char* name_space, const char *name)
{
+ MonoError error;
MonoClass *klass;
MonoObject *o;
MonoDomain *caller_domain = mono_domain_get ();
klass = mono_class_from_name (image, name_space, name);
- o = mono_object_new (domain, klass);
- g_assert (o != NULL);
+ o = mono_object_new_checked (domain, klass, &error);
+ g_assert (o != NULL && mono_error_ok (&error)); /* FIXME don't swallow the error */
if (domain != caller_domain)
mono_domain_set_internal (domain);
klass = mono_class_get_checked (image, token, &error);
g_assert (mono_error_ok (&error)); /* FIXME handle the error. */
- o = mono_object_new (mono_domain_get (), klass);
- g_assert (o != NULL);
+ o = mono_object_new_checked (mono_domain_get (), klass, &error);
+ g_assert (o != NULL && mono_error_ok (&error)); /* FIXME don't swallow the error */
mono_runtime_object_init (o);
static MonoException *
create_exception_two_strings (MonoClass *klass, MonoString *a1, MonoString *a2)
{
+ MonoError error;
MonoDomain *domain = mono_domain_get ();
MonoMethod *method = NULL;
MonoObject *o;
if (a2 != NULL)
count++;
- o = mono_object_new (domain, klass);
+ o = mono_object_new_checked (domain, klass, &error);
+ mono_error_assert_ok (&error);
iter = NULL;
while ((m = mono_class_get_methods (klass, &iter))) {
MonoException *
mono_get_exception_type_initialization (const gchar *type_name, MonoException *inner)
{
+ MonoError error;
MonoClass *klass;
gpointer args [2];
MonoObject *exc;
args [0] = mono_string_new (mono_domain_get (), type_name);
args [1] = inner;
- exc = mono_object_new (mono_domain_get (), klass);
+ exc = mono_object_new_checked (mono_domain_get (), klass, &error);
+ mono_error_assert_ok (&error);
mono_runtime_invoke (method, exc, args, NULL);
return (MonoException *) exc;
MonoException *
mono_get_exception_reflection_type_load (MonoArray *types, MonoArray *exceptions)
{
+ MonoError error;
MonoClass *klass;
gpointer args [2];
MonoObject *exc;
args [0] = types;
args [1] = exceptions;
- exc = mono_object_new (mono_domain_get (), klass);
+ exc = mono_object_new_checked (mono_domain_get (), klass, &error);
+ mono_error_assert_ok (&error);
mono_runtime_invoke (method, exc, args, NULL);
return (MonoException *) exc;
MonoException *
mono_get_exception_runtime_wrapped (MonoObject *wrapped_exception)
{
+ MonoError error;
MonoClass *klass;
MonoObject *o;
MonoMethod *method;
klass = mono_class_from_name (mono_get_corlib (), "System.Runtime.CompilerServices", "RuntimeWrappedException");
g_assert (klass);
- o = mono_object_new (domain, klass);
- g_assert (o != NULL);
+ o = mono_object_new_checked (domain, klass, &error);
+ g_assert (o != NULL && mono_error_ok (&error)); /* FIXME don't swallow the error */
method = mono_class_get_method_from_name (klass, ".ctor", 1);
g_assert (method);
* This is complicated by the fact that Nullables have
* a variable structure.
*/
- nullable = mono_object_new (mono_domain_get (), nklass);
+ nullable = mono_object_new_checked (mono_domain_get (), nklass, &error);
+ if (!mono_error_ok (&error)) {
+ mono_error_set_pending_exception (&error);
+ return;
+ }
mono_nullable_init ((guint8 *)mono_object_unbox (nullable), value, nklass);
t->type = def_type;
klass = mono_class_from_mono_type (t);
g_free (t);
- o = mono_object_new (domain, klass);
+ o = mono_object_new_checked (domain, klass, &error);
+ if (!mono_error_ok (&error)) {
+ mono_error_set_pending_exception (&error);
+ return NULL;
+ }
v = ((gchar *) o) + sizeof (MonoObject);
mono_get_constant_value_from_blob (domain, def_type, def_value, v);
break;
ICALL_EXPORT MonoObject *
ves_icall_System_Enum_ToObject (MonoReflectionType *enumType, guint64 value)
{
+ MonoError error;
MonoDomain *domain;
MonoClass *enumc;
MonoObject *res;
etype = mono_class_enum_basetype (enumc);
- res = mono_object_new (domain, enumc);
+ res = mono_object_new_checked (domain, enumc, &error);
+ mono_error_raise_exception (&error);
write_enum_value ((char *)res + sizeof (MonoObject), etype->type, value);
return res;
ICALL_EXPORT MonoObject *
ves_icall_System_Enum_get_value (MonoObject *eobj)
{
+ MonoError error;
MonoObject *res;
MonoClass *enumc;
gpointer dst;
g_assert (eobj->vtable->klass->enumtype);
enumc = mono_class_from_mono_type (mono_class_enum_basetype (eobj->vtable->klass));
- res = mono_object_new (mono_object_domain (eobj), enumc);
+ res = mono_object_new_checked (mono_object_domain (eobj), enumc, &error);
+ mono_error_raise_exception (&error);
dst = (char *)res + sizeof (MonoObject);
src = (char *)eobj + sizeof (MonoObject);
size = mono_class_value_size (enumc, NULL);
{
static MonoClass *System_Version = NULL;
static MonoMethod *create_version = NULL;
+ MonoError error;
MonoObject *result;
gpointer args [4];
args [1] = &minor;
args [2] = &build;
args [3] = &revision;
- result = mono_object_new (domain, System_Version);
+ result = mono_object_new_checked (domain, System_Version, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
mono_runtime_invoke (create_version, result, args, NULL);
return result;
ves_icall_System_Reflection_Assembly_GetReferencedAssemblies (MonoReflectionAssembly *assembly)
{
static MonoClass *System_Reflection_AssemblyName;
+ MonoError error;
MonoArray *result;
MonoDomain *domain = mono_object_domain (assembly);
int i, count = 0;
mono_metadata_decode_row (t, i, cols, MONO_ASSEMBLYREF_SIZE);
- aname = (MonoReflectionAssemblyName *) mono_object_new (
- domain, System_Reflection_AssemblyName);
+ aname = (MonoReflectionAssemblyName *) mono_object_new_checked (
+ domain, System_Reflection_AssemblyName, &error);
+ mono_error_raise_exception (&error);
MONO_OBJECT_SETREF (aname, name, mono_string_new (domain, mono_metadata_string_heap (image, cols [MONO_ASSEMBLYREF_NAME])));
ves_icall_System_Delegate_CreateDelegate_internal (MonoReflectionType *type, MonoObject *target,
MonoReflectionMethod *info, MonoBoolean throwOnBindFailure)
{
+ MonoError error;
MonoClass *delegate_class = mono_class_from_mono_type (type->type);
MonoObject *delegate;
gpointer func;
return NULL;
}
- delegate = mono_object_new (mono_object_domain (type), delegate_class);
+ delegate = mono_object_new_checked (mono_object_domain (type), delegate_class, &error);
+ mono_error_raise_exception (&error);
if (method_is_dynamic (method)) {
/* Creating a trampoline would leak memory */
ICALL_EXPORT MonoMulticastDelegate *
ves_icall_System_Delegate_AllocDelegateLike_internal (MonoDelegate *delegate)
{
+ MonoError error;
MonoMulticastDelegate *ret;
g_assert (mono_class_has_parent (mono_object_class (delegate), mono_defaults.multicastdelegate_class));
- ret = (MonoMulticastDelegate*) mono_object_new (mono_object_domain (delegate), mono_object_class (delegate));
+ ret = (MonoMulticastDelegate*) mono_object_new_checked (mono_object_domain (delegate), mono_object_class (delegate), &error);
+ mono_error_raise_exception (&error);
ret->delegate.invoke_impl = mono_runtime_create_delegate_trampoline (mono_object_class (delegate));
return ret;
ICALL_EXPORT MonoObject *
ves_icall_Remoting_RealProxy_GetTransparentProxy (MonoObject *this_obj, MonoString *class_name)
{
+ MonoError error;
MonoDomain *domain = mono_object_domain (this_obj);
MonoObject *res;
MonoRealProxy *rp = ((MonoRealProxy *)this_obj);
MonoType *type;
MonoClass *klass;
- res = mono_object_new (domain, mono_defaults.transparent_proxy_class);
+ res = mono_object_new_checked (domain, mono_defaults.transparent_proxy_class, &error);
+ mono_error_raise_exception (&error);
tp = (MonoTransparentProxy*) res;
MONO_OBJECT_SETREF (tp, rp, rp);
ICALL_EXPORT MonoObject *
ves_icall_System_Activator_CreateInstanceInternal (MonoReflectionType *type)
{
+ MonoError error;
+ MonoObject *result;
MonoClass *klass;
MonoDomain *domain;
/* No arguments -> null */
return NULL;
- return mono_object_new (domain, klass);
+ result = mono_object_new_checked (domain, klass, &error);
+ mono_error_raise_exception (&error);
+ return result;
}
ICALL_EXPORT MonoReflectionMethod *
ves_icall_System_Globalization_CultureInfo_internal_get_cultures (MonoBoolean neutral,
MonoBoolean specific, MonoBoolean installed)
{
+ MonoError error;
MonoArray *ret;
MonoClass *klass;
MonoCultureInfo *culture;
ci = &culture_entries [i];
is_neutral = ci->territory == 0;
if ((neutral && is_neutral) || (specific && !is_neutral)) {
- culture = (MonoCultureInfo *) mono_object_new (domain, klass);
+ culture = (MonoCultureInfo *) mono_object_new_checked (domain, klass, &error);
+ mono_error_raise_exception (&error);
mono_runtime_object_init ((MonoObject *) culture);
construct_culture (culture, ci);
culture->use_user_override = TRUE;
MonoDelegate*
mono_ftnptr_to_delegate (MonoClass *klass, gpointer ftn)
{
+ MonoError error;
guint32 gchandle;
MonoDelegate *d;
g_free (sig);
}
- d = (MonoDelegate*)mono_object_new (mono_domain_get (), klass);
+ d = (MonoDelegate*)mono_object_new_checked (mono_domain_get (), klass, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
mono_delegate_ctor_with_method ((MonoObject*)d, this_obj, mono_compile_method (wrapper), wrapper);
}
static MonoStringBuilder *
mono_string_builder_new (int starting_string_length)
{
+ MonoError error;
static MonoClass *string_builder_class;
static MonoMethod *sb_ctor;
static void *args [1];
// array will always be garbage collected.
args [0] = &initial_len;
- MonoStringBuilder *sb = (MonoStringBuilder*)mono_object_new (mono_domain_get (), string_builder_class);
+ MonoStringBuilder *sb = (MonoStringBuilder*)mono_object_new_checked (mono_domain_get (), string_builder_class, &error);
MonoObject *exc;
- g_assert (sb);
+ g_assert (sb && mono_error_ok (&error)); /* FIXME don't swallow the error */
mono_runtime_invoke (sb_ctor, sb, args, &exc);
g_assert (!exc);
static MonoObject *
mono_delegate_end_invoke (MonoDelegate *delegate, gpointer *params)
{
+ MonoError error;
MonoDomain *domain = mono_domain_get ();
MonoAsyncResult *ares;
MonoMethod *method = NULL;
#ifndef DISABLE_REMOTING
if (delegate->target && mono_object_is_transparent_proxy (delegate->target)) {
MonoTransparentProxy* tp = (MonoTransparentProxy *)delegate->target;
- msg = (MonoMethodMessage *)mono_object_new (domain, mono_defaults.mono_method_message_class);
+ msg = (MonoMethodMessage *)mono_object_new_checked (domain, mono_defaults.mono_method_message_class, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
mono_message_init (domain, msg, delegate->method_info, NULL);
msg->call_type = CallType_EndInvoke;
MONO_OBJECT_SETREF (msg, async_result, ares);
MonoObject *
ves_icall_System_Runtime_InteropServices_Marshal_PtrToStructure_type (gpointer src, MonoReflectionType *type)
{
+ MonoError error;
MonoClass *klass;
MonoDomain *domain = mono_domain_get ();
MonoObject *res;
return NULL;
}
- res = mono_object_new (domain, klass);
+ res = mono_object_new_checked (domain, klass, &error);
+ mono_error_raise_exception (&error);
ptr_to_structure (src, res);
MonoObject *
mono_object_new_specific_checked (MonoVTable *vtable, MonoError *error);
+MonoObject *
+ves_icall_object_new (MonoDomain *domain, MonoClass *klass);
+
MonoObject *
ves_icall_object_new_specific (MonoVTable *vtable);
if (mono_class_is_nullable (klass))
return mono_nullable_box (mono_field_get_addr (obj, vtable, field), klass);
- o = mono_object_new (domain, klass);
+ o = mono_object_new_checked (domain, klass, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
v = ((gchar *) o) + sizeof (MonoObject);
if (is_literal) {
{
MONO_REQ_GC_UNSAFE_MODE;
+ MonoError error;
+
MonoClass *param_class = klass->cast_class;
mono_class_setup_fields_locking (klass);
g_assert (mono_class_from_mono_type (klass->fields [1].type) == mono_defaults.boolean_class);
if (*(guint8*)(buf + klass->fields [1].offset - sizeof (MonoObject))) {
- MonoObject *o = mono_object_new (mono_domain_get (), param_class);
+ MonoObject *o = mono_object_new_checked (mono_domain_get (), param_class, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
if (param_class->has_references)
mono_gc_wbarrier_value_copy (mono_object_unbox (o), buf + klass->fields [0].offset - sizeof (MonoObject), 1, param_class);
else
g_assert (mono_class_is_marshalbyref (obj->vtable->klass));
- real_proxy = (MonoRealProxy*) mono_object_new (domain, mono_defaults.real_proxy_class);
+ real_proxy = (MonoRealProxy*) mono_object_new_checked (domain, mono_defaults.real_proxy_class, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
reflection_type = mono_type_get_object_checked (domain, &obj->vtable->klass->byval_arg, &error);
mono_error_raise_exception (&error); /* FIXME don't raise here */
{
MONO_REQ_GC_UNSAFE_MODE;
+ MonoError error;
MonoClass *klass;
gpointer args [2];
MonoMethod *method = NULL;
args [0] = exc;
args [1] = &is_terminating;
- obj = mono_object_new (mono_domain_get (), klass);
+ obj = mono_object_new_checked (mono_domain_get (), klass, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
mono_runtime_invoke (method, obj, args, NULL);
return obj;
has_byref_nullables = TRUE;
} else {
/* MS seems to create the objects if a null is passed in */
- if (!mono_array_get (params, MonoObject*, i))
- mono_array_setref (params, i, mono_object_new (mono_domain_get (), mono_class_from_mono_type (sig->params [i])));
+ if (!mono_array_get (params, MonoObject*, i)) {
+ MonoObject *o = mono_object_new_checked (mono_domain_get (), mono_class_from_mono_type (sig->params [i]), &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+ mono_array_setref (params, i, o);
+ }
if (t->byref) {
/*
}
if (!obj) {
- obj = mono_object_new (mono_domain_get (), method->klass);
- g_assert (obj); /*maybe we should raise a TLE instead?*/
+ obj = mono_object_new_checked (mono_domain_get (), method->klass, &error);
+ g_assert (obj && mono_error_ok (&error)); /*maybe we should raise a TLE instead?*/ /* FIXME don't swallow error */
#ifndef DISABLE_REMOTING
if (mono_object_class(obj) == mono_defaults.transparent_proxy_class) {
method = mono_marshal_get_remoting_invoke (method->slot == -1 ? method : method->klass->vtable [method->slot]);
MonoObject *nullable;
/* Convert the unboxed vtype into a Nullable structure */
- nullable = mono_object_new (mono_domain_get (), method->klass);
+ nullable = mono_object_new_checked (mono_domain_get (), method->klass, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
mono_nullable_init ((guint8 *)mono_object_unbox (nullable), mono_value_box (mono_domain_get (), method->klass->cast_class, obj), method->klass);
obj = mono_object_unbox (nullable);
return result;
}
+MonoObject *
+ves_icall_object_new (MonoDomain *domain, MonoClass *klass)
+{
+ MONO_REQ_GC_UNSAFE_MODE;
+
+ MonoError error;
+
+ MonoObject * result = mono_object_new_checked (domain, klass, &error);
+
+ mono_error_raise_exception (&error);
+ return result;
+}
+
/**
* mono_object_new_checked:
* @klass: the class of the object that we want to create
MONO_REQ_GC_UNSAFE_MODE;
MonoError error;
+ MonoObject *result;
MonoClass *klass;
klass = mono_class_get_checked (image, token, &error);
g_assert (mono_error_ok (&error)); /* FIXME don't swallow the error */
+
+ result = mono_object_new_checked (domain, klass, &error);
- return mono_object_new (domain, klass);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+ return result;
+
}
{
MONO_REQ_GC_UNSAFE_MODE;
+ MonoError error;
MonoWaitHandle *res;
gpointer params [1];
static MonoMethod *handle_set;
- res = (MonoWaitHandle *)mono_object_new (domain, mono_defaults.manualresetevent_class);
+ res = (MonoWaitHandle *)mono_object_new_checked (domain, mono_defaults.manualresetevent_class, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
/* Even though this method is virtual, it's safe to invoke directly, since the object type matches. */
if (!handle_set)
{
MONO_REQ_GC_UNSAFE_MODE;
- MonoAsyncResult *res = (MonoAsyncResult *)mono_object_new (domain, mono_defaults.asyncresult_class);
+ MonoError error;
+ MonoAsyncResult *res = (MonoAsyncResult *)mono_object_new_checked (domain, mono_defaults.asyncresult_class, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
MonoObject *context = mono_runtime_capture_context (domain);
/* we must capture the execution context from the original thread */
if (context) {
{
MONO_REQ_GC_UNSAFE_MODE;
+ MonoError error;
MonoDomain *domain = mono_domain_get ();
MonoMethodSignature *sig = mono_method_signature (method);
MonoMethodMessage *msg;
int i, count;
- msg = (MonoMethodMessage *)mono_object_new (domain, mono_defaults.mono_method_message_class);
-
+ msg = (MonoMethodMessage *)mono_object_new_checked (domain, mono_defaults.mono_method_message_class, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+
if (invoke) {
mono_message_init (domain, msg, mono_method_get_object (domain, invoke, NULL), NULL);
count = sig->param_count - 2;
{
MONO_REQ_GC_UNSAFE_MODE;
+ MonoError error;
static MonoMethod *getter = NULL;
MonoDomain *domain = mono_domain_get ();
MonoTransparentProxy *tp = (MonoTransparentProxy *) this_obj;
field_class = mono_class_from_mono_type (field->type);
- msg = (MonoMethodMessage *)mono_object_new (domain, mono_defaults.mono_method_message_class);
+ msg = (MonoMethodMessage *)mono_object_new_checked (domain, mono_defaults.mono_method_message_class, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
out_args = mono_array_new (domain, mono_defaults.object_class, 1);
mono_message_init (domain, msg, mono_method_get_object (domain, getter, NULL), out_args);
{
MONO_REQ_GC_UNSAFE_MODE;
+ MonoError error;
static MonoMethod *getter = NULL;
MonoDomain *domain = mono_domain_get ();
MonoTransparentProxy *tp = (MonoTransparentProxy *) this_obj;
if (mono_class_is_contextbound (tp->remote_class->proxy_class) && tp->rp->context == (MonoObject *) mono_context_get ()) {
gpointer val;
if (field_class->valuetype) {
- res = mono_object_new (domain, field_class);
+ res = mono_object_new_checked (domain, field_class, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
val = ((gchar *) res) + sizeof (MonoObject);
} else {
val = &res;
mono_raise_exception (mono_get_exception_not_supported ("Linked away."));
}
- msg = (MonoMethodMessage *)mono_object_new (domain, mono_defaults.mono_method_message_class);
+ msg = (MonoMethodMessage *)mono_object_new_checked (domain, mono_defaults.mono_method_message_class, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
out_args = mono_array_new (domain, mono_defaults.object_class, 1);
mono_message_init (domain, msg, mono_method_get_object (domain, getter, NULL), out_args);
{
MONO_REQ_GC_UNSAFE_MODE;
+ MonoError error;
static MonoMethod *setter = NULL;
MonoDomain *domain = mono_domain_get ();
MonoTransparentProxy *tp = (MonoTransparentProxy *) this_obj;
arg = *((MonoObject **)val);
- msg = (MonoMethodMessage *)mono_object_new (domain, mono_defaults.mono_method_message_class);
+ msg = (MonoMethodMessage *)mono_object_new_checked (domain, mono_defaults.mono_method_message_class, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
mono_message_init (domain, msg, mono_method_get_object (domain, setter, NULL), NULL);
full_name = mono_type_get_full_name (klass);
{
MONO_REQ_GC_UNSAFE_MODE;
+ MonoError error;
static MonoMethod *setter = NULL;
MonoDomain *domain = mono_domain_get ();
MonoTransparentProxy *tp = (MonoTransparentProxy *) this_obj;
mono_raise_exception (mono_get_exception_not_supported ("Linked away."));
}
- msg = (MonoMethodMessage *)mono_object_new (domain, mono_defaults.mono_method_message_class);
+ msg = (MonoMethodMessage *)mono_object_new_checked (domain, mono_defaults.mono_method_message_class, &error);
+ mono_error_raise_exception (&error);
mono_message_init (domain, msg, mono_method_get_object (domain, setter, NULL), NULL);
full_name = mono_type_get_full_name (klass);
MONO_API mono_unichar2 *mono_string_chars (MonoString *s);
MONO_API int mono_string_length (MonoString *s);
-MONO_API MonoObject *
+MONO_RT_EXTERNAL_ONLY MONO_API MonoObject *
mono_object_new (MonoDomain *domain, MonoClass *klass);
MONO_API MonoObject *
static MonoObject* get_process_module (MonoAssembly *assembly, MonoClass *proc_class)
{
+ MonoError error;
static MonoClass *filever_class = NULL;
MonoObject *item, *filever;
MonoDomain *domain = mono_domain_get ();
/* Build a System.Diagnostics.ProcessModule with the data.
*/
- item = mono_object_new (domain, proc_class);
+ item = mono_object_new_checked (domain, proc_class, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
if (!filever_class)
filever_class = mono_class_from_name (system_assembly,
"System.Diagnostics",
"FileVersionInfo");
- filever = mono_object_new (domain, filever_class);
+ filever = mono_object_new_checked (domain, filever_class, &error);
+ if (!mono_error_ok (&error)) goto leave;
process_get_assembly_fileversion (filever, assembly);
process_set_field_string_char (filever, "filename", filename);
process_set_field_string_char (item, "filename", filename);
process_set_field_string_char (item, "modulename", modulename);
+leave:
g_free (filename);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
return item;
}
static MonoObject* process_add_module (HANDLE process, HMODULE mod, gunichar2 *filename, gunichar2 *modulename, MonoClass *proc_class)
{
+ MonoError error;
static MonoClass *filever_class = NULL;
MonoObject *item, *filever;
MonoDomain *domain=mono_domain_get ();
/* Build a System.Diagnostics.ProcessModule with the data.
*/
- item=mono_object_new (domain, proc_class);
+ item=mono_object_new_checked (domain, proc_class, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
if (!filever_class)
filever_class=mono_class_from_name (system_assembly,
"System.Diagnostics",
"FileVersionInfo");
- filever=mono_object_new (domain, filever_class);
+ filever=mono_object_new_checked (domain, filever_class, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
process_get_fileversion (filever, filename);
MonoReflectionAssembly*
mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly)
{
+ MonoError error;
static MonoClass *assembly_type;
MonoReflectionAssembly *res;
g_assert (klass);
assembly_type = klass;
}
- res = (MonoReflectionAssembly *)mono_object_new (domain, assembly_type);
+ res = (MonoReflectionAssembly *)mono_object_new_checked (domain, assembly_type, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
res->assembly = assembly;
CACHE_OBJECT (MonoReflectionAssembly *, assembly, res, NULL);
MonoReflectionModule*
mono_module_get_object (MonoDomain *domain, MonoImage *image)
{
+ MonoError error;
static MonoClass *module_type;
MonoReflectionModule *res;
char* basename;
g_assert (klass);
module_type = klass;
}
- res = (MonoReflectionModule *)mono_object_new (domain, module_type);
+ res = (MonoReflectionModule *)mono_object_new_checked (domain, module_type, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
res->image = image;
MONO_OBJECT_SETREF (res, assembly, (MonoReflectionAssembly *) mono_assembly_get_object(domain, image->assembly));
MonoReflectionModule*
mono_module_file_get_object (MonoDomain *domain, MonoImage *image, int table_index)
{
+ MonoError error;
static MonoClass *module_type;
MonoReflectionModule *res;
MonoTableInfo *table;
g_assert (klass);
module_type = klass;
}
- res = (MonoReflectionModule *)mono_object_new (domain, module_type);
+ res = (MonoReflectionModule *)mono_object_new_checked (domain, module_type, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
table = &image->tables [MONO_TABLE_FILE];
g_assert (table_index < table->rows);
System_Reflection_MonoGenericMethod = mono_class_from_name (mono_defaults.corlib, "System.Reflection", "MonoGenericMethod");
klass = System_Reflection_MonoGenericMethod;
}
- gret = (MonoReflectionGenericMethod*)mono_object_new (domain, klass);
+ gret = (MonoReflectionGenericMethod*)mono_object_new_checked (domain, klass, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
gret->method.method = method;
MONO_OBJECT_SETREF (gret, method.name, mono_string_new (domain, method->name));
System_Reflection_MonoMethod = mono_class_from_name (mono_defaults.corlib, "System.Reflection", "MonoMethod");
klass = System_Reflection_MonoMethod;
}
- ret = (MonoReflectionMethod*)mono_object_new (domain, klass);
+ ret = (MonoReflectionMethod*)mono_object_new_checked (domain, klass, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
ret->method = method;
rt = mono_type_get_object_checked (domain, &refclass->byval_arg, &error);
CHECK_OBJECT (MonoReflectionField *, field, klass);
if (!monofield_klass)
monofield_klass = mono_class_from_name (mono_defaults.corlib, "System.Reflection", "MonoField");
- res = (MonoReflectionField *)mono_object_new (domain, monofield_klass);
+ res = (MonoReflectionField *)mono_object_new_checked (domain, monofield_klass, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
res->klass = klass;
res->field = field;
MONO_OBJECT_SETREF (res, name, mono_string_new (domain, mono_field_get_name (field)));
MonoReflectionProperty*
mono_property_get_object (MonoDomain *domain, MonoClass *klass, MonoProperty *property)
{
+ MonoError error;
MonoReflectionProperty *res;
static MonoClass *monoproperty_klass;
CHECK_OBJECT (MonoReflectionProperty *, property, klass);
if (!monoproperty_klass)
monoproperty_klass = mono_class_from_name (mono_defaults.corlib, "System.Reflection", "MonoProperty");
- res = (MonoReflectionProperty *)mono_object_new (domain, monoproperty_klass);
+ res = (MonoReflectionProperty *)mono_object_new_checked (domain, monoproperty_klass, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
res->klass = klass;
res->property = property;
CACHE_OBJECT (MonoReflectionProperty *, property, res, klass);
MonoReflectionEvent*
mono_event_get_object (MonoDomain *domain, MonoClass *klass, MonoEvent *event)
{
+ MonoError error;
MonoReflectionEvent *res;
MonoReflectionMonoEvent *mono_event;
static MonoClass *monoevent_klass;
CHECK_OBJECT (MonoReflectionEvent *, event, klass);
if (!monoevent_klass)
monoevent_klass = mono_class_from_name (mono_defaults.corlib, "System.Reflection", "MonoEvent");
- mono_event = (MonoReflectionMonoEvent *)mono_object_new (domain, monoevent_klass);
+ mono_event = (MonoReflectionMonoEvent *)mono_object_new_checked (domain, monoevent_klass, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
mono_event->klass = klass;
mono_event->event = event;
res = (MonoReflectionEvent*)mono_event;
} else
local_var_sig_token = 0; //FIXME
- ret = (MonoReflectionMethodBody*)mono_object_new (domain, System_Reflection_MethodBody);
+ ret = (MonoReflectionMethodBody*)mono_object_new_checked (domain, System_Reflection_MethodBody, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
ret->init_locals = header->init_locals;
ret->max_stack = header->max_stack;
/* Locals */
MONO_OBJECT_SETREF (ret, locals, mono_array_new_cached (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);
+ MonoReflectionLocalVariableInfo *info = (MonoReflectionLocalVariableInfo*)mono_object_new_checked (domain, System_Reflection_LocalVariableInfo, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
rt = mono_type_get_object_checked (domain, header->locals [i], &error);
mono_error_raise_exception (&error); /* FIXME don't raise here */
/* Exceptions */
MONO_OBJECT_SETREF (ret, clauses, mono_array_new_cached (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);
+ MonoReflectionExceptionHandlingClause *info = (MonoReflectionExceptionHandlingClause*)mono_object_new_checked (domain, System_Reflection_ExceptionHandlingClause, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
MonoExceptionClause *clause = &header->clauses [i];
info->flags = clause->flags;
MonoObject *
mono_get_object_from_blob (MonoDomain *domain, MonoType *type, const char *blob)
{
+ MonoError error;
void *retval;
MonoClass *klass;
MonoObject *object;
klass = mono_class_from_mono_type (type);
if (klass->valuetype) {
- object = mono_object_new (domain, klass);
+ object = mono_object_new_checked (domain, klass, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
retval = ((gchar *) object + sizeof (MonoObject));
if (klass->enumtype)
basetype = mono_class_enum_basetype (klass);
val = load_cattr_value (image, &subc->byval_arg, p, end, error);
obj = NULL;
if (mono_error_ok (error)) {
- obj = mono_object_new (mono_domain_get (), subc);
+ obj = mono_object_new_checked (mono_domain_get (), subc, error);
g_assert (!subc->has_references);
- mono_gc_memmove_atomic ((char*)obj + sizeof (MonoObject), val, mono_class_value_size (subc, NULL));
+ if (mono_error_ok (error))
+ mono_gc_memmove_atomic ((char*)obj + sizeof (MonoObject), val, mono_class_value_size (subc, NULL));
}
g_free (val);
mono_error_raise_exception (&error); /* FIXME don't raise here */
params [1] = val;
- retval = mono_object_new (mono_domain_get (), klass);
+ retval = mono_object_new_checked (mono_domain_get (), klass, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
unboxed = mono_object_unbox (retval);
mono_runtime_invoke (ctor, unboxed, params, NULL);
{
static MonoClass *klass;
static MonoMethod *ctor;
+ MonoError error;
MonoObject *retval;
void *unboxed, *params [2];
params [0] = minfo;
params [1] = typedarg;
- retval = mono_object_new (mono_domain_get (), klass);
+ retval = mono_object_new_checked (mono_domain_get (), klass, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
unboxed = mono_object_unbox (retval);
mono_runtime_invoke (ctor, unboxed, params, NULL);
}
if (len == 0) {
- attr = mono_object_new (mono_domain_get (), method->klass);
+ attr = mono_object_new_checked (mono_domain_get (), method->klass, error);
+ if (!mono_error_ok (error)) return NULL;
mono_runtime_invoke (method, attr, NULL, NULL);
return attr;
}
}
named = p;
- attr = mono_object_new (mono_domain_get (), method->klass);
+ attr = mono_object_new_checked (mono_domain_get (), method->klass, error);
+ if (!mono_error_ok (error)) goto fail;
mono_runtime_invoke (method, attr, params, &exc);
if (exc)
create_custom_attr_data (MonoImage *image, MonoCustomAttrEntry *cattr)
{
static MonoMethod *ctor;
+ MonoError error;
MonoDomain *domain;
MonoObject *attr;
void *params [4];
ctor = mono_class_get_method_from_name (mono_defaults.customattribute_data_class, ".ctor", 4);
domain = mono_domain_get ();
- attr = mono_object_new (domain, mono_defaults.customattribute_data_class);
+ attr = mono_object_new_checked (domain, mono_defaults.customattribute_data_class, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
params [0] = mono_method_get_object (domain, cattr->ctor, NULL);
params [1] = mono_assembly_get_object (domain, image->assembly);
params [2] = (gpointer)&cattr->data;
g_assert (System_Reflection_Emit_MarshalAsAttribute);
}
- minfo = (MonoReflectionMarshalAsAttribute*)mono_object_new (domain, System_Reflection_Emit_MarshalAsAttribute);
+ minfo = (MonoReflectionMarshalAsAttribute*)mono_object_new_checked (domain, System_Reflection_Emit_MarshalAsAttribute, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
minfo->utype = spec->native;
switch (minfo->utype) {
static MonoObject*
create_object_from_sockaddr(struct sockaddr *saddr, int sa_size, gint32 *error)
{
+ MonoError merror;
MonoDomain *domain = mono_domain_get ();
MonoObject *sockaddr_obj;
MonoArray *data;
domain->sockaddr_class=mono_class_from_name (get_socket_assembly (), "System.Net", "SocketAddress");
g_assert (domain->sockaddr_class);
}
- sockaddr_obj=mono_object_new(domain, domain->sockaddr_class);
+ sockaddr_obj=mono_object_new_checked(domain, domain->sockaddr_class, &merror);
+ mono_error_raise_exception (&merror); /* FIXME don't raise here */
/* Locate the SocketAddress data buffer in the object */
if (!domain->sockaddr_data_field) {
# endif
socklen_t credsize = sizeof(cred);
#endif
+ MonoError merror;
MonoDomain *domain=mono_domain_get();
MonoObject *obj;
MonoClass *obj_class;
obj_class=mono_class_from_name(get_socket_assembly (),
"System.Net.Sockets",
"LingerOption");
- obj=mono_object_new(domain, obj_class);
-
+ obj=mono_object_new_checked(domain, obj_class, &merror);
+ mono_error_raise_exception (&merror); /* FIXME don't raise here */
+
/* Locate and set the fields "bool enabled" and "int
* lingerTime"
*/
obj_class = mono_class_from_name(mono_posix_image,
"Mono.Posix",
"PeerCredData");
- obj = mono_object_new(domain, obj_class);
+ obj = mono_object_new_checked(domain, obj_class, &merror);
+ mono_error_raise_exception (&merror); /* FIXME don't raise here */
cred_data = (MonoPeerCredData *)obj;
cred_data->pid = cred.pid;
cred_data->uid = cred.uid;
mono_threadpool_ms_begin_invoke (MonoDomain *domain, MonoObject *target, MonoMethod *method, gpointer *params)
{
static MonoClass *async_call_klass = NULL;
+ MonoError error;
MonoMethodMessage *message;
MonoAsyncResult *async_result;
MonoAsyncCall *async_call;
message = mono_method_call_message_new (method, params, mono_get_delegate_invoke (method->klass), (params != NULL) ? (&async_callback) : NULL, (params != NULL) ? (&state) : NULL);
- async_call = (MonoAsyncCall*) mono_object_new (domain, async_call_klass);
+ async_call = (MonoAsyncCall*) mono_object_new_checked (domain, async_call_klass, &error);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
+
MONO_OBJECT_SETREF (async_call, msg, message);
MONO_OBJECT_SETREF (async_call, state, state);
static void
mono_threads_get_thread_dump (MonoArray **out_threads, MonoArray **out_stack_frames)
{
+ MonoError error;
ThreadDumpUserData ud;
MonoInternalThread *thread_array [128];
MonoDomain *domain = mono_domain_get ();
MonoDebugSourceLocation *location;
int tindex, nthreads;
+ mono_error_init (&error);
+
*out_threads = NULL;
*out_stack_frames = NULL;
for (i = 0; i < ud.nframes; ++i) {
MonoStackFrameInfo *frame = &ud.frames [i];
MonoMethod *method = NULL;
- MonoStackFrame *sf = (MonoStackFrame *)mono_object_new (domain, mono_defaults.stack_frame_class);
+ MonoStackFrame *sf = (MonoStackFrame *)mono_object_new_checked (domain, mono_defaults.stack_frame_class, &error);
+ if (!mono_error_ok (&error))
+ goto leave;
sf->native_offset = frame->native_offset;
}
}
+leave:
g_free (ud.frames);
+ mono_error_raise_exception (&error); /* FIXME don't raise here */
}
/**
if (!strcmp (m->name, ".ctor")) {
if (m->klass->flags & TYPE_ATTRIBUTE_ABSTRACT)
return ERR_INVALID_ARGUMENT;
- else
- this_arg = mono_object_new (domain, m->klass);
+ else {
+ MonoError error;
+ this_arg = mono_object_new_checked (domain, m->klass, &error);
+ mono_error_assert_ok (&error);
+ }
} else {
return ERR_INVALID_ARGUMENT;
}
break;
}
case CMD_APPDOMAIN_CREATE_BOXED_VALUE: {
+ MonoError error;
MonoClass *klass;
MonoDomain *domain2;
MonoObject *o;
// FIXME:
g_assert (domain == domain2);
- o = mono_object_new (domain, klass);
+ o = mono_object_new_checked (domain, klass, &error);
+ mono_error_assert_ok (&error);
err = decode_value (&klass->byval_arg, domain, (guint8 *)mono_object_unbox (o), p, &p, end);
if (err != ERR_NONE)
break;
}
case CMD_TYPE_CREATE_INSTANCE: {
+ MonoError error;
MonoObject *obj;
- obj = mono_object_new (domain, klass);
+ obj = mono_object_new_checked (domain, klass, &error);
+ mono_error_assert_ok (&error);
buffer_add_objid (buf, obj);
break;
}
return NULL;
}
- return mono_object_new (mono_domain_get (), klass);
+ MonoObject *obj = mono_object_new_checked (mono_domain_get (), klass, &error);
+ if (!mono_error_ok (&error))
+ mono_error_set_pending_exception (&error);
+ return obj;
}
/*
if (cfg->opt & MONO_OPT_SHARED) {
EMIT_NEW_DOMAINCONST (cfg, iargs [0]);
iargs [1] = data;
- alloc_ftn = mono_object_new;
+ alloc_ftn = ves_icall_object_new;
} else {
iargs [0] = data;
alloc_ftn = ves_icall_object_new_specific;
EMIT_NEW_DOMAINCONST (cfg, iargs [0]);
EMIT_NEW_CLASSCONST (cfg, iargs [1], klass);
- alloc_ftn = mono_object_new;
+ alloc_ftn = ves_icall_object_new;
} else if (cfg->compile_aot && cfg->cbb->out_of_line && klass->type_token && klass->image == mono_defaults.corlib && !klass->generic_class) {
/* This happens often in argument checking code, eg. throw new FooException... */
/* Avoid relocations and save some space by calling a helper function specialized to mscorlib */
MONO_ADD_INS (cfg->cbb, iargs [0]);
NEW_CLASSCONST (cfg, iargs [1], klass);
MONO_ADD_INS (cfg->cbb, iargs [1]);
- *sp++ = mono_emit_jit_icall (cfg, mono_object_new, iargs);
+ *sp++ = mono_emit_jit_icall (cfg, ves_icall_object_new, iargs);
ip += 6;
inline_costs += 10 * num_calls++;
break;
MonoArray *
ves_icall_get_trace (MonoException *exc, gint32 skip, MonoBoolean need_file_info)
{
+ MonoError error;
MonoDomain *domain = mono_domain_get ();
MonoArray *res;
MonoArray *ta = exc->trace_ips;
for (i = skip; i < len; i++) {
MonoJitInfo *ji;
- MonoStackFrame *sf = (MonoStackFrame *)mono_object_new (domain, mono_defaults.stack_frame_class);
+ MonoStackFrame *sf = (MonoStackFrame *)mono_object_new_checked (domain, mono_defaults.stack_frame_class, &error);
+ mono_error_raise_exception (&error);
gpointer ip = mono_array_get (ta, gpointer, i * 2 + 0);
gpointer generic_info = mono_array_get (ta, gpointer, i * 2 + 1);
MonoMethod *method;
register_icall (mono_get_special_static_data, "mono_get_special_static_data", "ptr int", FALSE);
register_icall (mono_ldstr, "mono_ldstr", "object ptr ptr int32", FALSE);
register_icall (mono_helper_stelem_ref_check, "mono_helper_stelem_ref_check", "void object object", FALSE);
- register_icall (mono_object_new, "mono_object_new", "object ptr ptr", FALSE);
+ register_icall (ves_icall_object_new, "ves_icall_object_new", "object ptr ptr", FALSE);
register_icall (ves_icall_object_new_specific, "ves_icall_object_new_specific", "object ptr", FALSE);
register_icall (mono_array_new, "mono_array_new", "object ptr ptr int32", FALSE);
register_icall (ves_icall_array_new_specific, "ves_icall_array_new_specific", "object ptr int32", FALSE);