fixed ReadString() and throw_wrongchar()

This commit is contained in:
Timerix22 2022-04-19 14:25:53 +03:00
parent 4ac054d651
commit 3c8253d264
3 changed files with 11 additions and 17 deletions

View File

@ -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;

View File

@ -17,7 +17,7 @@ clear_bin:
mkdir $(OUTDIR) mkdir $(OUTDIR)
clang: CMP=clang clang: CMP=clang
WARN_ARGS=-Wall -Wno-ignored-qualifiers -Wno-incompatible-pointer-types-discards-qualifiers clang: WARN_ARGS=-Wall -Wno-ignored-qualifiers -Wno-incompatible-pointer-types-discards-qualifiers
clang: all clang: all
TEST_FILE=kerep_test.com TEST_FILE=kerep_test.com

View File

@ -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) {