Ejemplo n.º 1
1
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));
	}
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
/*
 * 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);
}
Ejemplo n.º 5
0
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);
}
Ejemplo n.º 6
0
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);
}
Ejemplo n.º 7
0
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);
}
Ejemplo n.º 8
0
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;
}
Ejemplo n.º 9
0
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;
}
Ejemplo n.º 10
0
/*
 * 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));
}
Ejemplo n.º 11
0
mioProperty mioClass::findProperty(const char *name) const
{
    if (!mclass) { return nullptr; }
    return mono_class_get_property_from_name(mclass, name);
}