marrub
/
LoveToken
Archived
1
0
Fork 0

fix the crap string block things

master
Marrub 2015-08-27 09:14:32 -04:00
parent cdf32f3453
commit dcb3534546
2 changed files with 16 additions and 10 deletions

View File

@ -522,9 +522,9 @@ char *LT_ReadNumber()
break; break;
} }
if(i > (TOKEN_STR_BLOCK_LENGTH * strBlocks)) if(i >= (TOKEN_STR_BLOCK_LENGTH * strBlocks))
{ {
str = LT_ReAlloc(str, TOKEN_STR_BLOCK_LENGTH * ++strBlocks); str = LT_ReAlloc(str, 1 + TOKEN_STR_BLOCK_LENGTH * ++strBlocks);
} }
str[i++] = c; str[i++] = c;
@ -586,18 +586,18 @@ void LT_ReadString(LT_Token *tk, char term)
return; return;
} }
if(i > (TOKEN_STR_BLOCK_LENGTH * strBlocks)) if(i >= (TOKEN_STR_BLOCK_LENGTH * strBlocks))
{ {
str = LT_ReAlloc(str, TOKEN_STR_BLOCK_LENGTH * ++strBlocks); str = LT_ReAlloc(str, 1 + TOKEN_STR_BLOCK_LENGTH * ++strBlocks);
} }
str = LT_Escaper(str, i++, c); str = LT_Escaper(str, i++, c);
} }
else else
{ {
if(i > (TOKEN_STR_BLOCK_LENGTH * strBlocks)) if(i >= (TOKEN_STR_BLOCK_LENGTH * strBlocks))
{ {
str = LT_ReAlloc(str, TOKEN_STR_BLOCK_LENGTH * ++strBlocks); str = LT_ReAlloc(str, 1 + TOKEN_STR_BLOCK_LENGTH * ++strBlocks);
} }
str[i++] = c; str[i++] = c;
@ -997,9 +997,9 @@ LT_Token LT_GetToken()
while(c != EOF && (isalnum(c) || c == '_')) while(c != EOF && (isalnum(c) || c == '_'))
{ {
if(i > (TOKEN_STR_BLOCK_LENGTH * strBlocks)) if(i >= (TOKEN_STR_BLOCK_LENGTH * strBlocks))
{ {
str = LT_ReAlloc(str, TOKEN_STR_BLOCK_LENGTH * ++strBlocks); str = LT_ReAlloc(str, 1 + TOKEN_STR_BLOCK_LENGTH * ++strBlocks);
} }
str[i++] = c; str[i++] = c;
@ -1036,14 +1036,20 @@ LT_Token LT_GetToken()
char *LT_ReadLiteral() char *LT_ReadLiteral()
{ {
size_t i = 0; size_t i = 0;
size_t strBlocks = 1;
int c; int c;
char *str = LT_Alloc(4096); char *str = LT_Alloc(TOKEN_STR_BLOCK_LENGTH);
while(LT_TRUE) while(LT_TRUE)
{ {
c = fgetc(parseFile); c = fgetc(parseFile);
if(c == '\r' || c == '\n' || c == EOF) break; if(c == '\r' || c == '\n' || c == EOF) break;
if(i >= (TOKEN_STR_BLOCK_LENGTH * strBlocks))
{
str = LT_ReAlloc(str, 1 + TOKEN_STR_BLOCK_LENGTH * ++strBlocks);
}
str[i++] = c; str[i++] = c;
} }

View File

@ -36,7 +36,7 @@ THE SOFTWARE.
// [marrub] This can be changed if you have either a lot of very // [marrub] This can be changed if you have either a lot of very
// long strings, or a lot of very small strings, for optimization. // long strings, or a lot of very small strings, for optimization.
#define TOKEN_STR_BLOCK_LENGTH 128 #define TOKEN_STR_BLOCK_LENGTH 4096
// [marrub] When using in FFI, remove this from the declarations. // [marrub] When using in FFI, remove this from the declarations.
// Also make sure to redefine this if your platform is not supported. // Also make sure to redefine this if your platform is not supported.