static void OutputExceptionDetails(MonoObject* exc) { MonoClass* eclass = mono_object_get_class(exc); if (eclass) { MonoObject* toStringExc = nullptr; MonoString* msg = mono_object_to_string(exc, &toStringExc); MonoProperty* prop = mono_class_get_property_from_name(eclass, "StackTrace"); MonoMethod* getter = mono_property_get_get_method(prop); MonoString* msg2 = (MonoString*)mono_runtime_invoke(getter, exc, NULL, NULL); if (toStringExc) { MonoProperty* prop = mono_class_get_property_from_name(eclass, "Message"); MonoMethod* getter = mono_property_get_get_method(prop); msg = (MonoString*)mono_runtime_invoke(getter, exc, NULL, NULL); } GlobalError("Unhandled exception in Mono script environment: %s %s", mono_string_to_utf8(msg), mono_string_to_utf8(msg2)); } }
void set_exception_message(MonoException *p_exc, String message) { MonoClass *klass = mono_object_get_class((MonoObject *)p_exc); MonoProperty *prop = mono_class_get_property_from_name(klass, "Message"); MonoString *msg = GDMonoMarshal::mono_string_from_godot(message); void *params[1] = { msg }; property_set_value(prop, (MonoObject *)p_exc, params, NULL); }
static inline void print_report (const gchar *format, ...) { MonoError error; MonoClass *klass; MonoProperty *prop; MonoString *str; char *stack_trace; va_list ap; fprintf (stdout, "-=-=-=-=-=-=- MONO_IOMAP REPORT -=-=-=-=-=-=-\n"); va_start (ap, format); vfprintf (stdout, format, ap); fprintf (stdout, "\n"); va_end (ap); klass = mono_class_load_from_name (mono_get_corlib (), "System", "Environment"); mono_class_init (klass); prop = mono_class_get_property_from_name (klass, "StackTrace"); str = (MonoString*)mono_property_get_value_checked (prop, NULL, NULL, &error); mono_error_assert_ok (&error); stack_trace = mono_string_to_utf8_checked (str, &error); mono_error_assert_ok (&error); fprintf (stdout, "-= Stack Trace =-\n%s\n\n", stack_trace); g_free (stack_trace); fflush (stdout); }
/* * plmono_trigdata_get_columns * * Get Columns property value of TriggerData class */ MonoObject* plmono_trigdata_get_columns(MonoClass *trigdata) { MonoVTable *vt; MonoProperty *prop; vt = mono_class_vtable(plmono_get_domain(), trigdata); mono_runtime_class_init(vt); prop = mono_class_get_property_from_name(trigdata, "Columns"); return mono_property_get_value(prop, NULL, NULL, NULL); }
MonoObject* ml_get_info_prop(MonoObject *obj) { MonoClass *klass; MonoProperty *prop; klass = mono_class_get_parent(mono_object_get_class(obj)); prop = mono_class_get_property_from_name(klass, "Info"); return mono_property_get_value(prop, obj, NULL, NULL); }
gchar* ml_get_prop_string(MonoObject *obj, char *field) { MonoClass *klass; MonoProperty *prop; MonoString *str; klass = mono_object_get_class(obj); prop = mono_class_get_property_from_name(klass, field); str = (MonoString*)mono_property_get_value(prop, obj, NULL, NULL); return mono_string_to_utf8(str); }
void ml_set_prop_string(MonoObject *obj, char *field, char *data) { MonoClass *klass; MonoProperty *prop; MonoString *str; gpointer args[1]; klass = mono_object_get_class(obj); prop = mono_class_get_property_from_name(klass, field); str = mono_string_new(ml_get_domain(), data); args[0] = str; mono_property_set_value(prop, obj, args, NULL); }
String get_exception_name_and_message(MonoException *p_exc) { String res; MonoClass *klass = mono_object_get_class((MonoObject *)p_exc); MonoType *type = mono_class_get_type(klass); char *full_name = mono_type_full_name(type); res += full_name; mono_free(full_name); res += ": "; MonoProperty *prop = mono_class_get_property_from_name(klass, "Message"); MonoString *msg = (MonoString *)property_get_value(prop, (MonoObject *)p_exc, NULL, NULL); res += GDMonoMarshal::mono_string_to_godot(msg); return res; }
GDMonoProperty *GDMonoClass::get_property(const StringName &p_name) { Map<StringName, GDMonoProperty *>::Element *result = properties.find(p_name); if (result) return result->value(); if (properties_fetched) return NULL; MonoProperty *raw_property = mono_class_get_property_from_name(mono_class, String(p_name).utf8().get_data()); if (raw_property) { GDMonoProperty *property = memnew(GDMonoProperty(raw_property, this)); properties.insert(p_name, property); return property; } return NULL; }
/* * plmono_trigger_build_result * * Build trigger's "NEW" row tuple based on TableRow object content */ Datum plmono_trigger_build_result(TriggerData *trigdata, MonoObject *cols) { MonoClass *rowklass; MonoProperty *item; TupleDesc resdesc; gpointer key, val; char *attname; Oid atttype; Datum *atts; bool *nulls; int i; resdesc = trigdata->tg_relation->rd_att; if (!(atts = palloc(resdesc->natts * sizeof(Datum)))) elog(ERROR, "Not enough memory"); if (!(nulls = palloc(resdesc->natts * sizeof(bool)))) elog(ERROR, "Not enough memory"); rowklass = mono_object_get_class(cols); item = mono_class_get_property_from_name(rowklass, "Item"); for (i = 0; i < resdesc->natts; i++) { attname = NameStr(resdesc->attrs[i]->attname); atttype = resdesc->attrs[i]->atttypid; key = mono_string_new(plmono_get_domain(), attname); /* attribute name */ val = mono_property_get_value(item, cols, &key, NULL); if (atttype != TEXTOID) val = mono_object_unbox(val); atts[i] = plmono_obj_to_datum(val, atttype); nulls[i] = 0; } return PointerGetDatum(heap_form_tuple(resdesc, atts, nulls)); }
mioProperty mioClass::findProperty(const char *name) const { if (!mclass) { return nullptr; } return mono_class_get_property_from_name(mclass, name); }