fixed ReadString() and throw_wrongchar()
This commit is contained in:
parent
4ac054d651
commit
c50d4b546e
@ -1,8 +1,8 @@
|
|||||||
#include "DtsodV24.h"
|
#include "DtsodV24.h"
|
||||||
#include "../Autoarr/StringBuilder.h"
|
#include "../Autoarr/StringBuilder.h"
|
||||||
|
|
||||||
#define ARR_BC 8
|
#define ARR_BC 64
|
||||||
#define ARR_BL 16
|
#define ARR_BL 1024
|
||||||
#define STRB_BC 64
|
#define STRB_BC 64
|
||||||
#define STRB_BL 1024
|
#define STRB_BL 1024
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ Maybe ERROR_WRONGCHAR(const char c, char* _text, char* text_first, const char* s
|
|||||||
errBuf[i]=_c;
|
errBuf[i]=_c;
|
||||||
if(!_c) break;
|
if(!_c) break;
|
||||||
}
|
}
|
||||||
char* errmsg=malloc(1024);
|
char errmsg[1024];
|
||||||
IFWIN(
|
IFWIN(
|
||||||
sprintf_s(errmsg,1024, "unexpected <%c> at:\n"
|
sprintf_s(errmsg,1024, "unexpected <%c> at:\n"
|
||||||
" \"%s\"\n"
|
" \"%s\"\n"
|
||||||
@ -60,7 +60,7 @@ Maybe ERROR_WRONGCHAR(const char c, char* _text, char* text_first, const char* s
|
|||||||
);
|
);
|
||||||
safethrow(errmsg,;);
|
safethrow(errmsg,;);
|
||||||
}
|
}
|
||||||
#define safethrow_wrongchar(C, freeMem) freeMem; return ERROR_WRONGCHAR(C, text, shared->sh_text_first, __FILE__,__LINE__,__func__)
|
#define safethrow_wrongchar(C, freeMem) { freeMem; return ERROR_WRONGCHAR(C, text, shared->sh_text_first, __FILE__,__LINE__,__func__); }
|
||||||
|
|
||||||
|
|
||||||
Maybe __SkipComment(DeserializeSharedData* shared) {
|
Maybe __SkipComment(DeserializeSharedData* shared) {
|
||||||
@ -139,6 +139,7 @@ Maybe __ReadString(DeserializeSharedData* shared){
|
|||||||
// replacing <\"> with <">
|
// replacing <\"> with <">
|
||||||
Autoarr_remove(b);
|
Autoarr_remove(b);
|
||||||
StringBuilder_append_char(b,c);
|
StringBuilder_append_char(b,c);
|
||||||
|
prevIsBackslash=false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
char* str=StringBuilder_build(b);
|
char* str=StringBuilder_build(b);
|
||||||
@ -263,12 +264,7 @@ Maybe __ReadValue(DeserializeSharedData* shared){
|
|||||||
valueStr.ptr=text+1; // skips '\n'
|
valueStr.ptr=text+1; // skips '\n'
|
||||||
break;
|
break;
|
||||||
case '"':
|
case '"':
|
||||||
if(valueStr.length!=0) {
|
if(valueStr.length!=0) safethrow_wrongchar(c,;);
|
||||||
char* vp=string_cpToCptr(valueStr);
|
|
||||||
printf("\nlength: %u valueStr: %s\n",valueStr.length, vp);
|
|
||||||
free(vp);
|
|
||||||
safethrow_wrongchar(c,;);
|
|
||||||
}
|
|
||||||
try(ReadString(),maybeString,;)
|
try(ReadString(),maybeString,;)
|
||||||
value=maybeString.value;
|
value=maybeString.value;
|
||||||
break;
|
break;
|
||||||
@ -317,15 +313,13 @@ Maybe __deserialize(char** _text, bool _calledRecursively) {
|
|||||||
text--;
|
text--;
|
||||||
while(true){
|
while(true){
|
||||||
try(ReadName(), maybeName, Hashtable_free(dict))
|
try(ReadName(), maybeName, Hashtable_free(dict))
|
||||||
if(!maybeName.value.VoidPtr) // end of file or '}' in recursive call
|
if(!maybeName.value.VoidPtr) // end of file or '}' in recursive call
|
||||||
goto END;
|
goto END;
|
||||||
char* nameCPtr=maybeName.value.VoidPtr;
|
char* nameCPtr=maybeName.value.VoidPtr;
|
||||||
printf("name: %s ", nameCPtr);
|
|
||||||
try(ReadValue(), val, {
|
try(ReadValue(), val, {
|
||||||
Hashtable_free(dict);
|
Hashtable_free(dict);
|
||||||
free(nameCPtr);
|
free(nameCPtr);
|
||||||
}) {
|
}) {
|
||||||
printuni(val.value);printf("\n");
|
|
||||||
if(partOfDollarList){
|
if(partOfDollarList){
|
||||||
Autoarr(Unitype)* list;
|
Autoarr(Unitype)* list;
|
||||||
Unitype lu;
|
Unitype lu;
|
||||||
|
|||||||
@ -38,6 +38,7 @@ void test_dtsod(){
|
|||||||
optime(__func__,1,({
|
optime(__func__,1,({
|
||||||
printf("\e[96m-------------[test_dtsod]-------------\n");
|
printf("\e[96m-------------[test_dtsod]-------------\n");
|
||||||
Hashtable* dtsod;
|
Hashtable* dtsod;
|
||||||
|
char* s;
|
||||||
|
|
||||||
optime("deserialize",1,({
|
optime("deserialize",1,({
|
||||||
tryLast(DtsodV24_deserialize(text),r)
|
tryLast(DtsodV24_deserialize(text),r)
|
||||||
@ -45,7 +46,6 @@ void test_dtsod(){
|
|||||||
}));
|
}));
|
||||||
print_dtsod(dtsod);
|
print_dtsod(dtsod);
|
||||||
|
|
||||||
char* s;
|
|
||||||
optime("serialize",1,({
|
optime("serialize",1,({
|
||||||
tryLast(DtsodV24_serialize(dtsod),r)
|
tryLast(DtsodV24_serialize(dtsod),r)
|
||||||
s=r.value.VoidPtr;
|
s=r.value.VoidPtr;
|
||||||
@ -65,7 +65,6 @@ void test_dtsod(){
|
|||||||
free(s);
|
free(s);
|
||||||
|
|
||||||
FILE* f=fopen("messages.dtsod", "r");
|
FILE* f=fopen("messages.dtsod", "r");
|
||||||
printf("f: %p\n", f);
|
|
||||||
if(f==NULL){
|
if(f==NULL){
|
||||||
perror("error ");
|
perror("error ");
|
||||||
throw("can't open file");
|
throw("can't open file");
|
||||||
@ -77,6 +76,7 @@ void test_dtsod(){
|
|||||||
fbuf[i++]=cc;
|
fbuf[i++]=cc;
|
||||||
}
|
}
|
||||||
fbuf[i]='\0';
|
fbuf[i]='\0';
|
||||||
|
fclose(f);
|
||||||
printf("read %u chars", i);
|
printf("read %u chars", i);
|
||||||
Maybe rrr=DtsodV24_deserialize(fbuf);
|
Maybe rrr=DtsodV24_deserialize(fbuf);
|
||||||
if(rrr.errmsg) {
|
if(rrr.errmsg) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user