Hi
is this funny function AppleObjCRuntimeV1::CreateObjectChecker actually used ?
First of all the snprintf is wrapped in an assert (!?). If the code gets compiled with -DNDEBUG, the function would pretty much do nothing.
Second, I guess, that this is some C-code that gets compiled on the fly, It seems to do nothing. I guess the code has a chance of crashing, if the parameter is not really an object. The debugger could notice that and figure out, that it's not an object. But guessing is not knowing...
Ciao
Nat!
struct BufStruct {
char contents[2048];
};
UtilityFunction *
AppleObjCRuntimeV1::CreateObjectChecker(const char *name)
{
std::unique_ptr<BufStruct> buf(new BufStruct);
assert(snprintf(&buf->contents[0], sizeof(buf->contents),
"struct __objc_class \n"
"{ \n"
" struct __objc_class *isa; \n"
" struct __objc_class *super_class; \n"
" const char *name; \n"
" // rest of struct elided because unused \n"
"}; \n"
" \n"
"struct __objc_object \n"
"{ \n"
" struct __objc_class *isa; \n"
"}; \n"
" \n"
"extern \"C\" void \n"
"%s(void *$__lldb_arg_obj, void *$__lldb_arg_selector) \n"
"{ \n"
" struct __objc_object *obj = (struct __objc_object*)$__lldb_arg_obj; \n"
" (int)strlen(obj->isa->name); \n"
"} \n",
name) < (int)sizeof(buf->contents));
Error error;
return GetTargetRef().GetUtilityFunctionForLanguage(buf->contents, eLanguageTypeObjC, name, error);
}