Skip to content

Commit e07f452

Browse files
authored
[mono] Use mono_is_sre functions instead of checking class names in more places. (#81305)
1 parent 87f0edb commit e07f452

File tree

4 files changed

+58
-27
lines changed

4 files changed

+58
-27
lines changed

src/mono/mono/metadata/custom-attrs.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2453,33 +2453,33 @@ mono_reflection_get_custom_attrs_info_checked (MonoObjectHandle obj, MonoError *
24532453
g_free (type_name);
24542454
goto leave;
24552455
}
2456-
} else if (strcmp ("RuntimeAssemblyBuilder", klass_name) == 0) {
2456+
} else if (mono_is_sre_assembly_builder (klass)) {
24572457
MonoReflectionAssemblyBuilderHandle assemblyb = MONO_HANDLE_CAST (MonoReflectionAssemblyBuilder, obj);
24582458
MonoReflectionAssemblyHandle assembly = MONO_HANDLE_CAST (MonoReflectionAssembly, assemblyb);
24592459
MonoArrayHandle cattrs = MONO_HANDLE_NEW_GET (MonoArray, assemblyb, cattrs);
24602460
MonoImage * image = MONO_HANDLE_GETVAL (assembly, assembly)->image;
24612461
g_assert (image);
24622462
cinfo = mono_custom_attrs_from_builders_handle (NULL, image, cattrs);
2463-
} else if (strcmp ("RuntimeTypeBuilder", klass_name) == 0) {
2463+
} else if (mono_is_sre_type_builder (klass)) {
24642464
MonoReflectionTypeBuilderHandle tb = MONO_HANDLE_CAST (MonoReflectionTypeBuilder, obj);
24652465
MonoReflectionModuleBuilderHandle module = MONO_HANDLE_NEW_GET (MonoReflectionModuleBuilder, tb, module);
24662466
MonoDynamicImage *dynamic_image = MONO_HANDLE_GETVAL (module, dynamic_image);
24672467
MonoArrayHandle cattrs = MONO_HANDLE_NEW_GET (MonoArray, tb, cattrs);
24682468
cinfo = mono_custom_attrs_from_builders_handle (NULL, &dynamic_image->image, cattrs);
2469-
} else if (strcmp ("RuntimeModuleBuilder", klass_name) == 0) {
2469+
} else if (mono_is_sre_module_builder (klass)) {
24702470
MonoReflectionModuleBuilderHandle mb = MONO_HANDLE_CAST (MonoReflectionModuleBuilder, obj);
24712471
MonoDynamicImage *dynamic_image = MONO_HANDLE_GETVAL (mb, dynamic_image);
24722472
MonoArrayHandle cattrs = MONO_HANDLE_NEW_GET (MonoArray, mb, cattrs);
24732473
cinfo = mono_custom_attrs_from_builders_handle (NULL, &dynamic_image->image, cattrs);
2474-
} else if (strcmp ("RuntimeConstructorBuilder", klass_name) == 0) {
2474+
} else if (mono_is_sre_ctor_builder (klass)) {
24752475
mono_error_set_not_supported (error, "");
24762476
goto leave;
2477-
} else if (strcmp ("RuntimeMethodBuilder", klass_name) == 0) {
2477+
} else if (mono_is_sre_method_builder (klass)) {
24782478
MonoReflectionMethodBuilderHandle mb = MONO_HANDLE_CAST (MonoReflectionMethodBuilder, obj);
24792479
MonoMethod *mhandle = MONO_HANDLE_GETVAL (mb, mhandle);
24802480
MonoArrayHandle cattrs = MONO_HANDLE_NEW_GET (MonoArray, mb, cattrs);
24812481
cinfo = mono_custom_attrs_from_builders_handle (NULL, m_class_get_image (mhandle->klass), cattrs);
2482-
} else if (strcmp ("RuntimeFieldBuilder", klass_name) == 0) {
2482+
} else if (mono_is_sre_field_builder (klass)) {
24832483
MonoReflectionFieldBuilderHandle fb = MONO_HANDLE_CAST (MonoReflectionFieldBuilder, obj);
24842484
MonoReflectionTypeBuilderHandle tb = MONO_HANDLE_CAST (MonoReflectionTypeBuilder, MONO_HANDLE_NEW_GET (MonoReflectionType, fb, typeb));
24852485
MonoReflectionModuleBuilderHandle mb = MONO_HANDLE_NEW_GET (MonoReflectionModuleBuilder, tb, module);

src/mono/mono/metadata/reflection.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2493,17 +2493,17 @@ mono_reflection_get_token_checked (MonoObjectHandle obj, MonoError *error)
24932493
MonoClass *klass = mono_handle_class (obj);
24942494

24952495
const char *klass_name = m_class_get_name (klass);
2496-
if (strcmp (klass_name, "RuntimeMethodBuilder") == 0) {
2496+
if (mono_is_sre_method_builder (klass)) {
24972497
MonoReflectionMethodBuilderHandle mb = MONO_HANDLE_CAST (MonoReflectionMethodBuilder, obj);
24982498

24992499
token = MONO_HANDLE_GETVAL (mb, table_idx) | MONO_TOKEN_METHOD_DEF;
2500-
} else if (strcmp (klass_name, "RuntimeConstructorBuilder") == 0) {
2500+
} else if (mono_is_sre_ctor_builder (klass)) {
25012501
MonoReflectionCtorBuilderHandle mb = MONO_HANDLE_CAST (MonoReflectionCtorBuilder, obj);
25022502

25032503
token = MONO_HANDLE_GETVAL (mb, table_idx) | MONO_TOKEN_METHOD_DEF;
2504-
} else if (strcmp (klass_name, "RuntimeFieldBuilder") == 0) {
2504+
} else if (mono_is_sre_field_builder (klass)) {
25052505
g_assert_not_reached ();
2506-
} else if (strcmp (klass_name, "RuntimeTypeBuilder") == 0) {
2506+
} else if (mono_is_sre_type_builder (klass)) {
25072507
MonoReflectionTypeBuilderHandle tb = MONO_HANDLE_CAST (MonoReflectionTypeBuilder, obj);
25082508
token = MONO_HANDLE_GETVAL (tb, table_idx) | MONO_TOKEN_TYPE_DEF;
25092509
} else if (strcmp (klass_name, "RuntimeType") == 0) {
@@ -2551,7 +2551,7 @@ mono_reflection_get_token_checked (MonoObjectHandle obj, MonoError *error)
25512551
MonoMethod *method = MONO_HANDLE_GETVAL (MONO_HANDLE_CAST (MonoReflectionMethod, member_impl), method);
25522552

25532553
token = mono_method_get_param_token (method, position);
2554-
} else if (strcmp (klass_name, "RuntimeModule") == 0 || strcmp (klass_name, "RuntimeModuleBuilder") == 0) {
2554+
} else if (strcmp (klass_name, "RuntimeModule") == 0 || mono_is_sre_module_builder (klass)) {
25552555
MonoReflectionModuleHandle m = MONO_HANDLE_CAST (MonoReflectionModule, obj);
25562556

25572557
token = MONO_HANDLE_GETVAL (m, token);
@@ -2713,7 +2713,7 @@ MonoReflectionMethodHandle
27132713
ves_icall_RuntimeMethodInfo_MakeGenericMethod_impl (MonoReflectionMethodHandle rmethod, MonoArrayHandle types, MonoError *error)
27142714
{
27152715
error_init (error);
2716-
g_assert (0 != strcmp (m_class_get_name (mono_handle_class (rmethod)), "RuntimeMethodBuilder"));
2716+
g_assert (!mono_is_sre_method_builder (mono_handle_class (rmethod)));
27172717

27182718
MonoMethod *method = MONO_HANDLE_GETVAL (rmethod, method);
27192719
MonoMethod *imethod = reflection_bind_generic_method_parameters (method, types, error);
@@ -3185,7 +3185,7 @@ mono_reflection_call_is_assignable_to (MonoClass *klass, MonoClass *oklass, Mono
31853185
* need a TypeBuilder so use mono_class_get_ref_info (klass).
31863186
*/
31873187
g_assert (mono_class_has_ref_info (klass));
3188-
g_assert (!strcmp (m_class_get_name (mono_object_class (&mono_class_get_ref_info_raw (klass)->type.object)), "RuntimeTypeBuilder")); /* FIXME use handles */
3188+
g_assert (mono_is_sre_type_builder (mono_object_class (&mono_class_get_ref_info_raw (klass)->type.object))); /* FIXME use handles */
31893189

31903190
params [0] = mono_type_get_object_checked (m_class_get_byval_arg (oklass), error);
31913191
return_val_if_nok (error, FALSE);

src/mono/mono/metadata/sre-internals.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,24 @@ mono_is_sre_generic_instance (MonoClass *klass);
6868
gboolean
6969
mono_is_sre_method_on_tb_inst (MonoClass *klass);
7070

71+
gboolean
72+
mono_is_sre_method_builder (MonoClass *klass);
73+
7174
gboolean
7275
mono_is_sre_ctor_builder (MonoClass *klass);
7376

77+
gboolean
78+
mono_is_sre_field_builder (MonoClass *klass);
79+
80+
gboolean
81+
mono_is_sre_property_builder (MonoClass *klass);
82+
83+
gboolean
84+
mono_is_sre_assembly_builder (MonoClass *klass);
85+
86+
gboolean
87+
mono_is_sre_module_builder (MonoClass *klass);
88+
7489
gboolean
7590
mono_is_sre_ctor_on_tb_inst (MonoClass *klass);
7691

src/mono/mono/metadata/sre.c

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,6 @@ static gboolean is_sre_byref (MonoClass *klass);
8787
static gboolean is_sre_pointer (MonoClass *klass);
8888
static gboolean is_sre_generic_instance (MonoClass *klass);
8989
static gboolean is_sre_type_builder (MonoClass *klass);
90-
static gboolean is_sre_method_builder (MonoClass *klass);
91-
static gboolean is_sre_field_builder (MonoClass *klass);
9290
static gboolean is_sre_gparam_builder (MonoClass *klass);
9391
static gboolean is_sre_enum_builder (MonoClass *klass);
9492
static gboolean is_sr_mono_method (MonoClass *klass);
@@ -1022,7 +1020,7 @@ mono_image_create_method_token (MonoDynamicImage *assembly, MonoObjectHandle obj
10221020
g_assert (!MONO_HANDLE_IS_NULL (opt_param_types) && (mono_method_signature_internal (method)->sentinelpos >= 0));
10231021
token = create_method_token (assembly, method, opt_param_types, error);
10241022
goto_if_nok (error, fail);
1025-
} else if (strcmp (klass->name, "RuntimeMethodBuilder") == 0) {
1023+
} else if (mono_is_sre_method_builder (klass)) {
10261024
g_assert_not_reached ();
10271025
} else {
10281026
g_error ("requested method token for %s\n", klass->name);
@@ -1476,8 +1474,8 @@ is_sre_type_builder (MonoClass *klass)
14761474
check_corlib_type_cached (klass, "System.Reflection.Emit", "RuntimeTypeBuilder");
14771475
}
14781476

1479-
static gboolean
1480-
is_sre_method_builder (MonoClass *klass)
1477+
gboolean
1478+
mono_is_sre_method_builder (MonoClass *klass)
14811479
{
14821480
check_corlib_type_cached (klass, "System.Reflection.Emit", "RuntimeMethodBuilder");
14831481
}
@@ -1488,12 +1486,30 @@ mono_is_sre_ctor_builder (MonoClass *klass)
14881486
check_corlib_type_cached (klass, "System.Reflection.Emit", "RuntimeConstructorBuilder");
14891487
}
14901488

1491-
static gboolean
1492-
is_sre_field_builder (MonoClass *klass)
1489+
gboolean
1490+
mono_is_sre_field_builder (MonoClass *klass)
14931491
{
14941492
check_corlib_type_cached (klass, "System.Reflection.Emit", "RuntimeFieldBuilder");
14951493
}
14961494

1495+
gboolean
1496+
mono_is_sre_property_builder (MonoClass *klass)
1497+
{
1498+
check_corlib_type_cached (klass, "System.Reflection.Emit", "RuntimePropertyBuilder");
1499+
}
1500+
1501+
gboolean
1502+
mono_is_sre_assembly_builder (MonoClass *klass)
1503+
{
1504+
check_corlib_type_cached (klass, "System.Reflection.Emit", "RuntimeAssemblyBuilder");
1505+
}
1506+
1507+
gboolean
1508+
mono_is_sre_module_builder (MonoClass *klass)
1509+
{
1510+
check_corlib_type_cached (klass, "System.Reflection.Emit", "RuntimeModuleBuilder");
1511+
}
1512+
14971513
static gboolean
14981514
is_sre_gparam_builder (MonoClass *klass)
14991515
{
@@ -1872,7 +1888,7 @@ get_prop_name_and_type (MonoObject *prop, char **name, MonoType **type, MonoErro
18721888
{
18731889
error_init (error);
18741890
MonoClass *klass = mono_object_class (prop);
1875-
if (strcmp (klass->name, "RuntimePropertyBuilder") == 0) {
1891+
if (mono_is_sre_property_builder (klass)) {
18761892
MonoReflectionPropertyBuilder *pb = (MonoReflectionPropertyBuilder *)prop;
18771893
*name = mono_string_to_utf8_checked_internal (pb->name, error);
18781894
return_if_nok (error);
@@ -1892,7 +1908,7 @@ get_field_name_and_type (MonoObject *field, char **name, MonoType **type, MonoEr
18921908
{
18931909
error_init (error);
18941910
MonoClass *klass = mono_object_class (field);
1895-
if (strcmp (klass->name, "RuntimeFieldBuilder") == 0) {
1911+
if (mono_is_sre_field_builder (klass)) {
18961912
MonoReflectionFieldBuilder *fb = (MonoReflectionFieldBuilder *)field;
18971913
*name = mono_string_to_utf8_checked_internal (fb->name, error);
18981914
return_if_nok (error);
@@ -3379,7 +3395,7 @@ mono_reflection_method_get_handle (MonoObject *method, MonoError *error)
33793395
MonoReflectionMethod *sr_method = (MonoReflectionMethod*)method;
33803396
return sr_method->method;
33813397
}
3382-
if (is_sre_method_builder (klass)) {
3398+
if (mono_is_sre_method_builder (klass)) {
33833399
MonoReflectionMethodBuilder *mb = (MonoReflectionMethodBuilder*)method;
33843400
return mb->mhandle;
33853401
}
@@ -3413,7 +3429,7 @@ mono_reflection_get_dynamic_overrides (MonoClass *klass, MonoMethod ***overrides
34133429
return;
34143430

34153431
tb = mono_class_get_ref_info_raw (klass); /* FIXME use handles */
3416-
g_assert (strcmp (mono_object_class (tb)->name, "RuntimeTypeBuilder") == 0);
3432+
g_assert (is_sre_type_builder (mono_object_class (tb)));
34173433

34183434
onum = 0;
34193435
if (tb->methods) {
@@ -4198,7 +4214,7 @@ mono_reflection_resolve_object (MonoImage *image, MonoObject *obj, MonoClass **h
41984214
}
41994215
*handle_class = mono_defaults.fieldhandle_class;
42004216
g_assert (result);
4201-
} else if (strcmp (oklass->name, "RuntimeTypeBuilder") == 0) {
4217+
} else if (is_sre_type_builder (oklass)) {
42024218
MonoReflectionTypeBuilderHandle tb = MONO_HANDLE_NEW (MonoReflectionTypeBuilder, (MonoReflectionTypeBuilder*)obj);
42034219
MonoType *type = mono_reflection_type_get_handle (&MONO_HANDLE_RAW (tb)->type, error);
42044220
goto_if_nok (error, return_null);
@@ -4285,9 +4301,9 @@ mono_reflection_resolve_object (MonoImage *image, MonoObject *obj, MonoClass **h
42854301

42864302
result = method;
42874303
*handle_class = mono_defaults.methodhandle_class;
4288-
} else if (is_sre_method_builder (oklass) ||
4304+
} else if (mono_is_sre_method_builder (oklass) ||
42894305
mono_is_sre_ctor_builder (oklass) ||
4290-
is_sre_field_builder (oklass) ||
4306+
mono_is_sre_field_builder (oklass) ||
42914307
is_sre_gparam_builder (oklass) ||
42924308
is_sre_generic_instance (oklass) ||
42934309
is_sre_array (oklass) ||

0 commit comments

Comments
 (0)