[reflection] MonoError-ize mono_reflection_lookup_dynamic_token
authorAleksey Kliger <aleksey@xamarin.com>
Tue, 15 Mar 2016 22:46:43 +0000 (15:46 -0700)
committerAleksey Kliger <aleksey@xamarin.com>
Mon, 28 Mar 2016 16:37:35 +0000 (12:37 -0400)
Since it gets installed as a callback, update the MonoLookupDynamicToken typedef.

mono/metadata/class-internals.h
mono/metadata/class.c
mono/metadata/object-internals.h
mono/metadata/reflection.c

index 51d6b04a1830bc292a564151b4792b20f05bee4c..772b22f93f410d3294e87dddfcd3022189e8b514 100644 (file)
@@ -918,7 +918,7 @@ extern MonoStats mono_stats;
 typedef gpointer (*MonoRemotingTrampoline)       (MonoDomain *domain, MonoMethod *method, MonoRemotingTarget target);
 typedef gpointer (*MonoDelegateTrampoline)       (MonoDomain *domain, MonoClass *klass);
 
-typedef gpointer (*MonoLookupDynamicToken) (MonoImage *image, guint32 token, gboolean valid_token, MonoClass **handle_class, MonoGenericContext *context);
+typedef gpointer (*MonoLookupDynamicToken) (MonoImage *image, guint32 token, gboolean valid_token, MonoClass **handle_class, MonoGenericContext *context, MonoError *error);
 
 typedef gboolean (*MonoGetCachedClassInfo) (MonoClass *klass, MonoCachedClassInfo *res);
 
index 801d7851be5ba77b9b9a35cf80353b53de76a7fd..6e333d4ea9569744501cdeb411215b910c53419d 100644 (file)
@@ -8879,15 +8879,23 @@ mono_install_lookup_dynamic_token (MonoLookupDynamicToken func)
 gpointer
 mono_lookup_dynamic_token (MonoImage *image, guint32 token, MonoGenericContext *context)
 {
+       MonoError error;
        MonoClass *handle_class;
 
-       return lookup_dynamic (image, token, TRUE, &handle_class, context);
+       gpointer result = lookup_dynamic (image, token, TRUE, &handle_class, context, &error);
+       mono_error_raise_exception (&error); /* FIXME don't raise here */
+       return result;
+
 }
 
 gpointer
 mono_lookup_dynamic_token_class (MonoImage *image, guint32 token, gboolean valid_token, MonoClass **handle_class, MonoGenericContext *context)
 {
-       return lookup_dynamic (image, token, valid_token, handle_class, context);
+       MonoError error;
+       gpointer result = lookup_dynamic (image, token, valid_token, handle_class, context, &error);
+       mono_error_raise_exception (&error); /* FIXME don't raise here */
+       return result;
+
 }
 
 static MonoGetCachedClassInfo get_cached_class_info = NULL;
index 0abd946be1810387f47d20ff7af0020acda250a3..4a316f33cc1da1bf8920ab2a73cb3b729bfe394a 100644 (file)
@@ -1383,7 +1383,7 @@ MonoArray  *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelp
 MonoReflectionMarshalAsAttribute* mono_reflection_marshal_as_attribute_from_marshal_spec (MonoDomain *domain, MonoClass *klass, MonoMarshalSpec *spec, MonoError *error);
 
 gpointer
-mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, gboolean valid_token, MonoClass **handle_class, MonoGenericContext *context);
+mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, gboolean valid_token, MonoClass **handle_class, MonoGenericContext *context, MonoError *error);
 
 gboolean
 mono_reflection_call_is_assignable_to (MonoClass *klass, MonoClass *oklass, MonoError *error);
index b40ce1bf90ecc9853074ad36b3778b99217dda83..c49153f85a1615f3052355b6c3fc37086d85f0a2 100644 (file)
@@ -13695,25 +13695,27 @@ mono_reflection_lookup_signature (MonoImage *image, MonoMethod *method, guint32
  * LOCKING: Take the loader lock
  */
 gpointer
-mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, gboolean valid_token, MonoClass **handle_class, MonoGenericContext *context)
+mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token, gboolean valid_token, MonoClass **handle_class, MonoGenericContext *context, MonoError *error)
 {
-       MonoError error;
        MonoDynamicImage *assembly = (MonoDynamicImage*)image;
        MonoObject *obj;
        MonoClass *klass;
 
+       mono_error_init (error);
+       
        obj = lookup_dyn_token (assembly, token);
        if (!obj) {
                if (valid_token)
                        g_error ("Could not find required dynamic token 0x%08x", token);
-               else
+               else {
+                       mono_error_set_execution_engine (error, "Could not find dynamic token 0x%08x", token);
                        return NULL;
+               }
        }
 
        if (!handle_class)
                handle_class = &klass;
-       gpointer result = resolve_object (image, obj, handle_class, context, &error);
-       mono_error_raise_exception (&error); /* FIXME don't raise here */
+       gpointer result = resolve_object (image, obj, handle_class, context, error);
        return result;
 }