gboolean mono_class_is_magic_int (MonoClass *klass) { static MonoClass *magic_nint_class; static MonoClass *magic_nuint_class; if (klass == magic_nint_class) return TRUE; if (klass == magic_nuint_class) return TRUE; if (magic_nint_class && magic_nuint_class) return FALSE; if (!mono_class_is_magic_assembly (klass)) return FALSE; if (strcmp ("System", m_class_get_name_space (klass)) != 0) return FALSE; if (strcmp ("nint", m_class_get_name (klass)) == 0) { magic_nint_class = klass; return TRUE; } if (strcmp ("nuint", m_class_get_name (klass)) == 0){ magic_nuint_class = klass; return TRUE; } return FALSE; }
gboolean mono_class_is_magic_float (MonoClass *klass) { static MonoClass *magic_nfloat_class; if (klass == magic_nfloat_class) return TRUE; if (magic_nfloat_class) return FALSE; if (!mono_class_is_magic_assembly (klass)) return FALSE; if (strcmp ("System", m_class_get_name_space (klass)) != 0) return FALSE; if (strcmp ("nfloat", m_class_get_name (klass)) == 0) { magic_nfloat_class = klass; /* Assert that we are using the matching assembly */ MonoClassField *value_field = mono_class_get_field_from_name_full (klass, "v", NULL); g_assert (value_field); MonoType *t = mono_field_get_type (value_field); MonoType *native = mini_native_type_replace_type (m_class_get_byval_arg (klass)); if (t->type != native->type) g_error ("Assembly used for native types '%s' doesn't match this runtime, %s is mapped to %s, expecting %s.\n", m_class_get_image (klass)->name, m_class_get_name (klass), mono_type_full_name (t), mono_type_full_name (native)); return TRUE; } return FALSE; }
static inline gboolean mono_class_is_magic_float (MonoClass *klass) { static MonoClass *magic_nfloat_class; if (klass == magic_nfloat_class) return TRUE; if (magic_nfloat_class) return FALSE; if (!mono_class_is_magic_assembly (klass)) return FALSE; if (strcmp ("System", klass->name_space) != 0) return FALSE; if (strcmp ("nfloat", klass->name) == 0) { magic_nfloat_class = klass; /* Assert that we are using the matching assembly */ MonoClassField *value_field = mono_class_get_field_from_name (klass, "v"); g_assert (value_field); MonoType *t = mono_field_get_type (value_field); g_assert (t->type == mini_native_type_replace_type (&klass->byval_arg)->type); return TRUE; } return FALSE; }