+ result = success;
+ if(eCON && (type.type == enumClass || type.type == unitClass))
+ {
+ // should this be set by calling __ecereVMethodID_class_OnGetDataFromString ?
+ if(((bool (*)(void *, void *, const char *))(void *)type._vTbl[__ecereVMethodID_class_OnGetDataFromString])(type, &value.i, string))
+ result = success;
+ else
+ result = typeMismatch;
+ }
+ else if(type && !strcmp(type.name, "bool"))
+ {
+ if(!strcmpi(string, "false")) value.i = 0;
+ else if(!strcmpi(string, "true")) value.i = 1;
+ else
+ result = typeMismatch;
+ }
+ else if(type && !strcmp(type.name, "SetBool"))
+ {
+ if(!strcmpi(string, "false")) value.i = SetBool::false;
+ else if(!strcmpi(string, "true")) value.i = SetBool::true;
+ else
+ result = typeMismatch;
+ }
+ else if(type && !strcmpi(string, "null"))
+ {
+ if(type.type != structClass)
+ value.p = 0;
+ }
+ else if(isSubclass(string, type))
+ {
+ void * object = value.p;
+ Class subtype = eSystem_SuperFindClass(string, type.module);
+ SkipEmpty();
+ result = GetObject(subtype, &object);
+ if(result)
+ {
+ if(subtype && subtype.type == structClass);
+ else if(subtype && (subtype.type == normalClass || subtype.type == noHeadClass || subtype.type == bitClass))
+ {
+ value.p = object;
+ }
+ else
+ {
+ result = typeMismatch;
+ if(subtype)
+ ((void (*)(void *, void *))(void *)subtype._vTbl[__ecereVMethodID_class_OnFree])(subtype, object);
+ }
+ }
+ }