marrub
/
LoveToken
Archived
1
0
Fork 0

fix a lot of things resultant of inadequate testing

master
Marrub 2015-08-17 13:42:31 -04:00
parent 537179902a
commit c0c57b3ae8
2 changed files with 26 additions and 12 deletions

View File

@ -447,7 +447,6 @@ LT_BOOL LT_Assert(LT_BOOL assertion, const char *fmt, ...)
LT_SetGarbage(assertString); LT_SetGarbage(assertString);
free(ftString);
free(asBuffer); free(asBuffer);
} }
@ -546,7 +545,7 @@ char *LT_ReadNumber()
return LT_SetGarbage(LT_ReAlloc(str, i)); return LT_SetGarbage(LT_ReAlloc(str, i));
} }
char *LT_ReadString(char term) void LT_ReadString(LT_Token *tk, char term)
{ {
size_t i = 0, strBlocks = 1; size_t i = 0, strBlocks = 1;
char *str = LT_Alloc(TOKEN_STR_BLOCK_LENGTH); char *str = LT_Alloc(TOKEN_STR_BLOCK_LENGTH);
@ -563,10 +562,14 @@ char *LT_ReadString(char term)
if(LT_Assert(c == EOF || c == '\n', "LT_ReadString: Unterminated string literal")) if(LT_Assert(c == EOF || c == '\n', "LT_ReadString: Unterminated string literal"))
{ {
char *emptyString = LT_Alloc(1); char *emptyString = LT_Alloc(2);
emptyString[0] = '\0'; emptyString[0] = '\0';
emptyString[1] = '\0';
return LT_SetGarbage(emptyString); tk->string = LT_SetGarbage(emptyString);
tk->strlen = 0;
return;
} }
if(c == '\\' && cfg.escapeChars) if(c == '\\' && cfg.escapeChars)
@ -575,8 +578,10 @@ char *LT_ReadString(char term)
if(LT_Assert(c == EOF || c == '\n', "LT_ReadString: Unterminated string literal")) if(LT_Assert(c == EOF || c == '\n', "LT_ReadString: Unterminated string literal"))
{ {
str[i] = '\0'; str[i++] = '\0';
return str; tk->strlen = (unsigned)i - 1;
tk->string = LT_SetGarbage(LT_ReAlloc(str, i));
return;
} }
if(i > (TOKEN_STR_BLOCK_LENGTH * strBlocks)) if(i > (TOKEN_STR_BLOCK_LENGTH * strBlocks))
@ -611,12 +616,16 @@ char *LT_ReadString(char term)
} }
#endif #endif
return LT_SetGarbage(LT_ReAlloc(str, i)); tk->strlen = (unsigned)i - 1;
tk->string = LT_SetGarbage(LT_ReAlloc(str, i));
return;
} }
char *LT_Escaper(char *str, size_t pos, char escape) char *LT_Escaper(char *str, size_t pos, char escape)
{ {
unsigned i; unsigned i;
LT_BOOL exitloop;
switch(escape) switch(escape)
{ {
@ -629,7 +638,9 @@ char *LT_Escaper(char *str, size_t pos, char escape)
case 't': str[pos] = '\t'; break; case 't': str[pos] = '\t'; break;
case 'v': str[pos] = '\v'; break; case 'v': str[pos] = '\v'; break;
case 'x': // [marrub] THIS ONE IS FUN case 'x': // [marrub] THIS ONE IS FUN
for(i = 0;;) i = 0;
exitloop = LT_FALSE;
while(!exitloop)
{ {
int c = fgetc(parseFile); int c = fgetc(parseFile);
@ -655,6 +666,7 @@ char *LT_Escaper(char *str, size_t pos, char escape)
default: default:
ungetc(c, parseFile); ungetc(c, parseFile);
str[pos] = i; str[pos] = i;
exitloop = LT_TRUE;
break; break;
} }
} }
@ -941,7 +953,7 @@ LT_Token LT_GetToken()
else if(c == cc) else if(c == cc)
{ {
tk.token = LT_TkNames[TOK_String]; tk.token = LT_TkNames[TOK_String];
tk.string = LT_ReadString(c); LT_ReadString(&tk, c);
return tk; return tk;
} }
} }
@ -962,7 +974,7 @@ LT_Token LT_GetToken()
else if(c == cc) else if(c == cc)
{ {
tk.token = LT_TkNames[TOK_Charac]; tk.token = LT_TkNames[TOK_Charac];
tk.string = LT_ReadString(c); LT_ReadString(&tk, c);
return tk; return tk;
} }
} }

View File

@ -108,6 +108,7 @@ typedef struct
{ {
const char *token; const char *token;
char *string; char *string;
unsigned strlen;
int pos; int pos;
} LT_Token; } LT_Token;
@ -128,7 +129,8 @@ typedef struct LT_GarbageList_s
*/ */
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C"
{
#endif #endif
LT_DLLEXPORT void LT_EXPORT LT_Init(LT_Config initCfg); LT_DLLEXPORT void LT_EXPORT LT_Init(LT_Config initCfg);
@ -148,7 +150,7 @@ LT_DLLEXPORT void LT_EXPORT LT_SetPos(int newPos);
LT_DLLEXPORT void LT_EXPORT LT_CloseFile(void); LT_DLLEXPORT void LT_EXPORT LT_CloseFile(void);
LT_DLLEXPORT char *LT_EXPORT LT_ReadNumber(void); LT_DLLEXPORT char *LT_EXPORT LT_ReadNumber(void);
LT_DLLEXPORT char *LT_EXPORT LT_ReadString(char term); LT_DLLEXPORT void LT_EXPORT LT_ReadString(LT_Token *tk, char term);
LT_DLLEXPORT char *LT_EXPORT LT_Escaper(char *str, size_t pos, char escape); LT_DLLEXPORT char *LT_EXPORT LT_Escaper(char *str, size_t pos, char escape);
LT_DLLEXPORT LT_Token LT_EXPORT LT_GetToken(void); LT_DLLEXPORT LT_Token LT_EXPORT LT_GetToken(void);
LT_DLLEXPORT void LT_EXPORT LT_SkipWhite(void); LT_DLLEXPORT void LT_EXPORT LT_SkipWhite(void);