コード例 #1
0
ファイル: ivar.cpp プロジェクト: Hasimir/darling
void ConvertIvarList(Class c, const ivar_list_t* list)
{
	LOG << list->count << " ivars within\n";

	for (size_t i = 0; i < list->count; i++)
	{
		auto* v = &list->ivar_list[i];
		int align = __builtin_ffs(v->alignment) - 1;

		LOG << "Ivar: name: " << v->name << "; type: " << v->type << "; offset: " << *v->offset << "; size: " << v->size << "; alignment: " << v->alignment << std::endl;
		class_addIvar(c, v->name, v->size, v->alignment, v->type);
		
		Ivar ivar = class_getInstanceVariable(c, v->name);
		
		if (ivar)
		{
			*v->offset = ivar_getOffset(ivar);
			LOG << "Ivar registered, ivar_getOffset() = " << ivar_getOffset(ivar) << " in " << class_getInstanceSize(c) << std::endl;
		}

		assert(ivar != nullptr);
		// assert(ivar_getOffset(ivar) == *v->offset);
	}
}
コード例 #2
0
ファイル: runtime.c プロジェクト: jsj2008/gnustep-base
id object_getIvar(id object, Ivar ivar)
{
  return *(id*)(((char*)object) + ivar_getOffset(ivar));
}
コード例 #3
0
ファイル: runtime.c プロジェクト: jsj2008/gnustep-base
void object_setIvar(id object, Ivar ivar, id value)
{
  char *addr = (char*)object;
  addr += ivar_getOffset(ivar);
  *(id*)addr = value;
}