Esempio n. 1
0
const Vector<GDMonoField *> &GDMonoClass::get_all_fields() {

	if (fields_fetched)
		return fields_list;

	void *iter = NULL;
	MonoClassField *raw_field = NULL;
	while ((raw_field = mono_class_get_fields(mono_class, &iter)) != NULL) {
		StringName name = mono_field_get_name(raw_field);

		Map<StringName, GDMonoField *>::Element *match = fields.find(name);

		if (match) {
			fields_list.push_back(match->get());
		} else {
			GDMonoField *field = memnew(GDMonoField(raw_field, this));
			fields.insert(name, field);
			fields_list.push_back(field);
		}
	}

	fields_fetched = true;

	return fields_list;
}
Esempio n. 2
0
MonoClassField *CScriptClass::GetMonoField(const char *name)
{
	MonoClass *pClass = (MonoClass *)m_pObject;
	MonoClassField *pCurField = nullptr;

	void *pIterator = 0;

	while (pClass != nullptr)
	{
		pCurField = mono_class_get_fields(pClass, &pIterator);
		if(pCurField == nullptr)
		{
			pClass = mono_class_get_parent(pClass);
			if(pClass == mono_get_object_class())
				break;

			pIterator = 0;
			continue;
		}

		if(!strcmp(mono_field_get_name(pCurField), name))
			return pCurField;
	}

	return nullptr;
}
Esempio n. 3
0
GDMonoField::GDMonoField(MonoClassField *p_raw_field, GDMonoClass *p_owner) {
	owner = p_owner;
	mono_field = p_raw_field;
	name = mono_field_get_name(mono_field);
	MonoType *field_type = mono_field_get_type(mono_field);
	type.type_encoding = mono_type_get_type(field_type);
	MonoClass *field_type_class = mono_class_from_mono_type(field_type);
	type.type_class = GDMono::get_singleton()->get_class(field_type_class);

	attrs_fetched = false;
	attributes = NULL;
}
Esempio n. 4
0
void CPipeServer::EnumFieldsInClass()
{
	void *c=(void *)ReadQword();
	void *iter=NULL;
	void *field;

	do
	{
		field=mono_class_get_fields(c, &iter);
		WriteQword((UINT_PTR)field);

		if (field)
		{
			char *name;
			void *fieldtype=mono_field_get_type(field);			
			WriteQword((UINT_PTR)fieldtype);
			WriteDword(mono_type_get_type(fieldtype));
			WriteQword((UINT_PTR)mono_field_get_parent(field));
			WriteDword((UINT_PTR)mono_field_get_offset(field));
			WriteDword(mono_field_get_flags(field));

			

			name=mono_field_get_name(field);
			WriteWord(strlen(name));
			Write(name, strlen(name));		

			name=mono_type_get_name(fieldtype);
			if (name)
			{
				WriteWord(strlen(name));
				Write(name, strlen(name));		
				g_free(name);
			}
			else
				WriteWord(0);
			
		}
	} while (field);	
}
Esempio n. 5
0
	MonoField::MonoField(MonoClassField* field)
		:mField(field), mFieldType(nullptr)
	{
		mName = mono_field_get_name(mField);
	}
Esempio n. 6
0
const char* mioField::getName() const
{
    if (!mfield) { return nullptr; }
    return mono_field_get_name(mfield);
}