fixed a lot of broken stuff
This commit is contained in:
@@ -98,9 +98,9 @@ Maybe __ReadName(DeserializeSharedData* shared){
|
||||
case '}':
|
||||
if(!calledRecursively || nameStr.length!=0)
|
||||
safethrow_wrongchar(c,;);
|
||||
return SUCCESS(UniPtr(CharPtr,NULL));
|
||||
return SUCCESS(UniPtrHeap(kerepTypeId_CharPtr,NULL));
|
||||
case ':':
|
||||
return SUCCESS(UniPtr(CharPtr,string_extract(nameStr)));
|
||||
return SUCCESS(UniPtrHeap(kerepTypeId_CharPtr,string_extract(nameStr)));
|
||||
case '$':
|
||||
if(nameStr.length!=0)
|
||||
safethrow_wrongchar(c,;);
|
||||
@@ -113,7 +113,7 @@ Maybe __ReadName(DeserializeSharedData* shared){
|
||||
}
|
||||
|
||||
if(nameStr.length>0) safethrow(ERR_ENDOFSTR,;);
|
||||
return SUCCESS(UniPtr(CharPtr,NULL));
|
||||
return SUCCESS(UniPtrHeap(kerepTypeId_CharPtr,NULL));
|
||||
}
|
||||
#define ReadName() __ReadName(shared)
|
||||
|
||||
@@ -137,7 +137,7 @@ Maybe __ReadString(DeserializeSharedData* shared){
|
||||
}
|
||||
else {
|
||||
char* str=StringBuilder_build(b).ptr;
|
||||
return SUCCESS(UniPtr(CharPtr,str));
|
||||
return SUCCESS(UniPtrHeap(kerepTypeId_CharPtr,str));
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -157,13 +157,13 @@ Maybe __ReadList(DeserializeSharedData* shared){
|
||||
try(ReadValue((&readingList)), val, Autoarr_free(list, true))
|
||||
Autoarr_add(list,val.value);
|
||||
if (!readingList){
|
||||
if(val.value.type==Null)
|
||||
if(val.value.typeId==kerepTypeId_Null)
|
||||
Autoarr_pop(list);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return SUCCESS(UniPtr(AutoarrUnitypePtr,list));
|
||||
return SUCCESS(UniPtrHeap(kerepTypeId_AutoarrUnitypePtr,list));
|
||||
};
|
||||
#define ReadList() __ReadList(shared)
|
||||
|
||||
@@ -275,7 +275,7 @@ Maybe __ReadValue(DeserializeSharedData* shared, bool* readingList){
|
||||
case ';':
|
||||
case ',':
|
||||
if(valueStr.length!=0){
|
||||
if(value.type!=Null)
|
||||
if(value.typeId!=kerepTypeId_Null)
|
||||
safethrow_wrongchar(c,Unitype_free(value));
|
||||
try(ParseValue(valueStr),maybeParsed,;)
|
||||
value=maybeParsed.value;
|
||||
@@ -321,7 +321,7 @@ Maybe __deserialize(char** _text, bool _calledRecursively) {
|
||||
}
|
||||
else{
|
||||
list=Autoarr_create(Unitype,ARR_BC,ARR_BL);
|
||||
Hashtable_add(dict,nameCPtr,UniPtr(AutoarrUnitypePtr,list));
|
||||
Hashtable_add(dict,nameCPtr,UniPtrHeap(kerepTypeId_AutoarrUnitypePtr,list));
|
||||
}
|
||||
Autoarr_add(list,val.value);
|
||||
}
|
||||
@@ -331,7 +331,7 @@ Maybe __deserialize(char** _text, bool _calledRecursively) {
|
||||
|
||||
END:
|
||||
*_text=text;
|
||||
return SUCCESS(UniPtr(HashtablePtr,dict));
|
||||
return SUCCESS(UniPtrHeap(kerepTypeId_HashtablePtr,dict));
|
||||
}
|
||||
|
||||
Maybe DtsodV24_deserialize(char* _text) {
|
||||
|
||||
@@ -23,81 +23,78 @@ void __AppendTabs(SerializeSharedData* shared) {
|
||||
Maybe __AppendValue(SerializeSharedData* shared, Unitype u);
|
||||
#define AppendValue(UNI) __AppendValue(shared, UNI)
|
||||
Maybe __AppendValue(SerializeSharedData* shared, Unitype u){
|
||||
switch(u.type){
|
||||
case Int64:
|
||||
StringBuilder_append_int64(b,u.Int64);
|
||||
break;
|
||||
case UInt64:
|
||||
StringBuilder_append_uint64(b,u.UInt64);
|
||||
addc('u');
|
||||
break;
|
||||
case Float64:
|
||||
StringBuilder_append_float64(b,u.Float64);
|
||||
addc('f');
|
||||
break;
|
||||
case CharPtr:
|
||||
addc('"');
|
||||
char c;
|
||||
while((c=*(char*)(u.VoidPtr++))){
|
||||
if(c=='\"') addc('\\');
|
||||
addc(c);
|
||||
}
|
||||
addc('"');
|
||||
break;
|
||||
case Bool:
|
||||
StringBuilder_append_cptr(b, u.Bool ? "true" : "false");
|
||||
break;
|
||||
case Null:
|
||||
safethrow("Null isn't supported in DtsodV24",;);
|
||||
case AutoarrUnitypePtr:
|
||||
if(Autoarr_length(((Autoarr_Unitype*)(u.VoidPtr)))){
|
||||
addc('\n');
|
||||
AppendTabs();
|
||||
addc('[');
|
||||
tabs++;
|
||||
Autoarr_foreach(((Autoarr_Unitype*)(u.VoidPtr)), e, ({
|
||||
addc('\n');
|
||||
AppendTabs();
|
||||
try(AppendValue(e),__,;);
|
||||
addc(',');
|
||||
}));
|
||||
StringBuilder_rmchar(b);
|
||||
addc('\n');
|
||||
tabs--;
|
||||
AppendTabs();
|
||||
addc(']');
|
||||
}
|
||||
else {
|
||||
addc('[');
|
||||
addc(']');
|
||||
}
|
||||
break;
|
||||
case HashtablePtr:
|
||||
// check hashtable is blank
|
||||
Hashtable_foreach(((Hashtable*)u.VoidPtr), __, ({
|
||||
goto hashtableNotBlank;
|
||||
if(__.key); // weird way to disable warning
|
||||
}));
|
||||
|
||||
|
||||
// blank hashtable
|
||||
addc('{');
|
||||
addc('}');
|
||||
break;
|
||||
|
||||
// not blank hashtable
|
||||
hashtableNotBlank:
|
||||
addc('\n');
|
||||
AppendTabs();
|
||||
addc('{');
|
||||
addc('\n');
|
||||
try(__serialize(b,tabs+1,u.VoidPtr),___,;);
|
||||
AppendTabs();
|
||||
addc('}');
|
||||
break;
|
||||
default: dbg((u.type)); safethrow(ERR_WRONGTYPE,;);
|
||||
if(u.typeId==kerepTypeId_Int64){
|
||||
StringBuilder_append_int64(b,u.Int64);
|
||||
}
|
||||
else if(u.typeId==kerepTypeId_UInt64){
|
||||
StringBuilder_append_uint64(b,u.UInt64);
|
||||
addc('u');
|
||||
}
|
||||
else if(u.typeId==kerepTypeId_Float64){
|
||||
StringBuilder_append_float64(b,u.Float64);
|
||||
addc('f');
|
||||
}
|
||||
else if(u.typeId==kerepTypeId_CharPtr){
|
||||
addc('"');
|
||||
char c;
|
||||
while((c=*(char*)(u.VoidPtr++))){
|
||||
if(c=='\"') addc('\\');
|
||||
addc(c);
|
||||
}
|
||||
addc('"');
|
||||
}
|
||||
else if(u.typeId==kerepTypeId_Bool){
|
||||
StringBuilder_append_cptr(b, u.Bool ? "true" : "false");
|
||||
}
|
||||
else if(u.typeId==kerepTypeId_Null){
|
||||
safethrow("Null isn't supported in DtsodV24",;);
|
||||
}
|
||||
else if(u.typeId==kerepTypeId_AutoarrUnitypePtr){
|
||||
if(Autoarr_length(((Autoarr_Unitype*)(u.VoidPtr)))){
|
||||
addc('\n');
|
||||
AppendTabs();
|
||||
addc('[');
|
||||
tabs++;
|
||||
Autoarr_foreach(((Autoarr_Unitype*)(u.VoidPtr)), e, ({
|
||||
addc('\n');
|
||||
AppendTabs();
|
||||
try(AppendValue(e),__,;);
|
||||
addc(',');
|
||||
}));
|
||||
StringBuilder_rmchar(b);
|
||||
addc('\n');
|
||||
tabs--;
|
||||
AppendTabs();
|
||||
addc(']');
|
||||
}
|
||||
else {
|
||||
addc('[');
|
||||
addc(']');
|
||||
}
|
||||
}
|
||||
else if(u.typeId==kerepTypeId_HashtablePtr){
|
||||
// check hashtable is blank
|
||||
Hashtable_foreach(((Hashtable*)u.VoidPtr), __, ({
|
||||
goto hashtableNotBlank;
|
||||
if(__.key); // weird way to disable warning
|
||||
}));
|
||||
// blank hashtable
|
||||
addc('{');
|
||||
addc('}');
|
||||
// not blank hashtable
|
||||
hashtableNotBlank:
|
||||
addc('\n');
|
||||
AppendTabs();
|
||||
addc('{');
|
||||
addc('\n');
|
||||
try(__serialize(b,tabs+1,u.VoidPtr),___,;);
|
||||
AppendTabs();
|
||||
addc('}');
|
||||
}
|
||||
else {
|
||||
dbg((u.typeId));
|
||||
safethrow(ERR_WRONGTYPE,;);
|
||||
}
|
||||
|
||||
return MaybeNull;
|
||||
};
|
||||
|
||||
@@ -125,5 +122,5 @@ Maybe DtsodV24_serialize(Hashtable* dtsod){
|
||||
StringBuilder* sb=StringBuilder_create();
|
||||
try(__serialize(sb,0,dtsod),__, StringBuilder_free(sb));
|
||||
char* str=StringBuilder_build(sb).ptr;
|
||||
return SUCCESS(UniPtr(CharPtr, str));
|
||||
return SUCCESS(UniPtrHeap(kerepTypeId_CharPtr, str));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user