[mono-error] Since nothing sets the loader error anymore, mono_error_set_from_loader_...
authorRodrigo Kumpera <kumpera@gmail.com>
Thu, 31 Mar 2016 22:44:37 +0000 (15:44 -0700)
committerRodrigo Kumpera <kumpera@gmail.com>
Thu, 31 Mar 2016 22:44:37 +0000 (15:44 -0700)
mono/metadata/class.c
mono/metadata/icall.c
mono/metadata/loader.c
mono/metadata/reflection.c
mono/mini/mini.c
mono/utils/mono-error-internals.h
mono/utils/mono-error.c

index f7b36279f4af17942f00dd9af24aea8a7ba2e9b3..fc0b545430282f1b1f367229d742cccd5c160468 100644 (file)
@@ -286,13 +286,9 @@ mono_class_from_typeref_checked (MonoImage *image, guint32 type_token, MonoError
 done:
        /* Generic case, should be avoided for when a better error is possible. */
        if (!res && mono_error_ok (error)) {
-               if (mono_loader_get_last_error ()) { /*FIXME plug the above to not leak errors*/
-                       mono_error_set_from_loader_error (error);
-               } else {
-                       char *name = mono_class_name_from_token (image, type_token);
-                       char *assembly = mono_assembly_name_from_token (image, type_token);
-                       mono_error_set_type_load_name (error, name, assembly, "Could not resolve type with token %08x", type_token);
-               }
+               char *name = mono_class_name_from_token (image, type_token);
+               char *assembly = mono_assembly_name_from_token (image, type_token);
+               mono_error_set_type_load_name (error, name, assembly, "Could not resolve type with token %08x", type_token);
        }
        mono_loader_assert_no_error ();
        return res;
index cea8809e84fe18aeeb18f6eb2a16a58168c93fbc..9e5304375ff2c14219c47cdbd9bad64280a503f2 100644 (file)
@@ -4171,8 +4171,7 @@ loader_error:
        if (mono_class_has_failure (klass)) {
                mono_error_set_exception_instance (&error, mono_class_get_exception_for_failure (klass));
        } else {
-               mono_error_set_from_loader_error (&error);
-               mono_loader_clear_error ();
+               mono_loader_assert_no_error ();
        }
 
 failure:
@@ -4315,8 +4314,7 @@ loader_error:
        if (mono_class_has_failure (klass)) {
                mono_error_set_exception_instance (&error, mono_class_get_exception_for_failure (klass));
        } else {
-               mono_error_set_from_loader_error (&error);
-               mono_loader_clear_error ();
+               mono_loader_assert_no_error ();
        }
 
 failure:
index 56992b3612738bd5ea800a0a50edc2817068c202..ea13adbc4950eece741900395aacb6ba09a6b2f0 100644 (file)
@@ -599,10 +599,8 @@ mono_field_from_token_checked (MonoImage *image, guint32 token, MonoClass **retk
                        *retklass = k;
                field = mono_class_get_field (k, token);
                if (!field) {
-                       if (mono_loader_get_last_error ())
-                               mono_error_set_from_loader_error (error);
-                       else
-                               mono_error_set_bad_image (error, image, "Could not resolve field token 0x%08x", token);
+                       mono_loader_assert_no_error ();
+                       mono_error_set_bad_image (error, image, "Could not resolve field token 0x%08x", token);
                }
        }
 
@@ -1165,10 +1163,8 @@ method_from_memberref (MonoImage *image, guint32 idx, MonoGenericContext *typesp
                g_free (msig);
                msig = g_string_free (s, FALSE);
 
-               if (mono_loader_get_last_error ()) /* FIXME find_method and mono_method_search_in_array_class can leak a loader error */
-                       mono_error_set_from_loader_error (error);
-               else
-                       mono_error_set_method_load (error, klass, mname, "Could not find method %s", msig);
+               mono_loader_assert_no_error ();
+               mono_error_set_method_load (error, klass, mname, "Could not find method %s", msig);
 
                g_free (msig);
        }
index 200c41e5f804fa015801317184020629b1c46501..61e2a3bc2113b509449a0ca2a2603166a6ca58bd 100644 (file)
@@ -9702,11 +9702,6 @@ mono_reflection_resolve_custom_attribute_data (MonoReflectionMethod *ref_method,
        if (!mono_error_ok (&error))
                goto leave;
 
-       if (mono_loader_get_last_error ()) {
-               mono_error_set_from_loader_error (&error);
-               goto leave;
-       }
-
        if (!typedargs || !namedargs)
                goto leave;
 
@@ -10501,9 +10496,6 @@ mono_reflection_get_custom_attrs_data_checked (MonoObject *obj, MonoError *error
        } else
                result = mono_array_new (mono_domain_get (), mono_defaults.customattribute_data_class, 0);
 
-       if (mono_loader_get_last_error ())
-               mono_error_set_from_loader_error (error);
-
        return result;
 }
 
index 7101e69b33c22c279a381de66ddecf27a2bed2bd..ff4e227dd6ecf133548f55d6ba07bbbc4e790e1f 100644 (file)
@@ -1230,18 +1230,6 @@ mini_method_verify (MonoCompile *cfg, MonoMethod *method, gboolean fail_compile)
 
        res = mono_method_verify_with_current_settings (method, cfg->skip_visibility, is_fulltrust);
 
-       if (mono_loader_get_last_error ()) {
-               if (fail_compile) {
-                       mono_cfg_set_exception (cfg, MONO_EXCEPTION_MONO_ERROR);
-                       mono_error_set_from_loader_error (&cfg->error);
-               } else {
-                       mono_loader_clear_error ();
-               }
-               if (res)
-                       mono_free_verify_list (res);
-               return TRUE;
-       }
-
        if (res) { 
                for (tmp = res; tmp; tmp = tmp->next) {
                        MonoVerifyInfoExtended *info = (MonoVerifyInfoExtended *)tmp->data;
index 559998255665b96f3296be7cada14627505ae1c1..082c43e8b3b2bcca8954cdea9ee6f24e6efac4bf 100644 (file)
@@ -105,9 +105,6 @@ mono_error_set_not_supported (MonoError *error, const char *msg_format, ...);
 void
 mono_error_set_exception_instance (MonoError *error, MonoException *exc);
 
-void
-mono_error_set_from_loader_error (MonoError *error);
-
 MonoException*
 mono_error_prepare_exception (MonoError *error, MonoError *error_out);
 
index 94c0c4fd35a29639b9d692e08a9d7ce32d4ffbe8..f0eb3fc9908b63c56cfb709c1799766fd5f0a030 100644 (file)
@@ -411,83 +411,6 @@ mono_error_set_exception_instance (MonoError *oerror, MonoException *exc)
        error->exn.instance_handle = mono_gchandle_new (exc ? &exc->object : NULL, FALSE);
 }
 
-void
-mono_error_set_from_loader_error (MonoError *oerror)
-{
-       MonoLoaderError *loader_error = mono_loader_get_last_error ();
-       MonoErrorInternal *error = (MonoErrorInternal*)oerror;
-       gboolean dup_strings = TRUE;
-
-       mono_error_prepare (error);
-
-       if (!loader_error) {
-               mono_error_set_execution_engine (oerror, "Runtime tried to produce a mono-error from an empty loader-error");
-               return;
-       }
-
-       switch (loader_error->exception_type) {
-       case MONO_EXCEPTION_NONE:
-               mono_error_set_execution_engine (oerror, "Runtime tried to produce a mono-error from a non-error loader-error");
-               break;
-
-       case MONO_EXCEPTION_INVALID_PROGRAM:
-               mono_error_set_generic_error (oerror, "System", "InvalidProgramException", "Failed for unknown reasons.");
-               break;
-
-       case MONO_EXCEPTION_UNVERIFIABLE_IL:
-               mono_error_set_generic_error (oerror, "System.Security", "VerificationException", "Failed for unknown reasons.");
-               break;
-
-       case MONO_EXCEPTION_MISSING_METHOD:
-               error->error_code = MONO_ERROR_MISSING_METHOD;
-               mono_error_set_type_name (oerror, loader_error->class_name);
-               mono_error_set_member_name (oerror, loader_error->member_name);
-               error->full_message = g_strdup ("Failed for unknown reasons.");
-               break;
-
-       case MONO_EXCEPTION_MISSING_FIELD:
-               mono_error_set_field_load (oerror, loader_error->klass, loader_error->member_name, "Failed for unknown reasons.");
-               break;
-
-       case MONO_EXCEPTION_TYPE_LOAD:
-               mono_error_set_type_load_name (oerror, g_strdup (loader_error->class_name), g_strdup (loader_error->assembly_name), "Failed for unknown reasons.");
-               dup_strings = FALSE;
-               break;
-       
-       case MONO_EXCEPTION_FILE_NOT_FOUND:
-               mono_error_set_assembly_load_simple (oerror, loader_error->assembly_name, loader_error->ref_only);
-               break;
-
-       case MONO_EXCEPTION_METHOD_ACCESS:
-               mono_error_set_generic_error (oerror, "System", "MethodAccessException", "Failed for unknown reasons.");
-               break;
-
-       case MONO_EXCEPTION_FIELD_ACCESS:
-               mono_error_set_generic_error (oerror, "System", "FieldAccessException", "Failed for unknown reasons.");
-               break;
-
-       case MONO_EXCEPTION_OBJECT_SUPPLIED:
-       case MONO_EXCEPTION_GENERIC_SHARING_FAILED:
-               mono_error_set_execution_engine (oerror, "Runtime tried to produce a mono-error from JIT internal error %d", loader_error->exception_type);
-               break;
-
-       case MONO_EXCEPTION_BAD_IMAGE:
-               mono_error_set_bad_image_name (oerror, "<unknown>", "%s", loader_error->msg);
-               break;
-
-       case MONO_EXCEPTION_OUT_OF_MEMORY:
-               mono_error_set_out_of_memory (oerror, "Failed for unknown reasons.");
-               break;
-
-       default:
-               mono_error_set_execution_engine (oerror, "Runtime tried to produce an unknown loader-error %d", loader_error->exception_type);
-               break;
-       }
-
-       mono_error_dup_strings (oerror, dup_strings);
-       mono_loader_clear_error ();
-}
-
 void
 mono_loader_set_error_from_mono_error (MonoError *oerror)
 {