Skip to content

Commit 5152f6e

Browse files
committed
CPreProcessor,refactor: use unsigned char as the type of unget-buffer
We never store STRING_SYMBOL, CHAR_SYMBOL, and EOF to the unget-buffer. The original code was designed before I introduced charOrStringContents. In the design, STRING_SYMBOL and CHAR_SYMBOL could be stored to the unget-buffer. Signed-off-by: Masatake YAMATO <[email protected]>
1 parent 7433d0a commit 5152f6e

File tree

2 files changed

+13
-15
lines changed

2 files changed

+13
-15
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
a(i"犬猫鼠羊兎鶏牛熊"
2+
/* Push back a logger string */

parsers/cpreprocessor.c

+11-15
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,9 @@ enum eState {
107107
/* Defines the current state of the pre-processor.
108108
*/
109109
typedef struct sUngetBuffer {
110-
int *buffer; /* memory buffer for unget characters */
110+
unsigned char *buffer; /* memory buffer for unget characters */
111111
int size; /* the current unget buffer size */
112-
int *pointer; /* the current unget char: points in the
112+
unsigned char *pointer; /* the current unget char: points in the
113113
middle of the buffer */
114114
int dataSize; /* the number of valid unget characters
115115
in the buffer */
@@ -559,7 +559,7 @@ static void ungetBufferUngetc (ungetBuffer *ungetBuffer, const int c, vString *c
559559
// no unget data
560560
if(!ungetBuffer->buffer)
561561
{
562-
ungetBuffer->buffer = (int *)eMalloc(8 * sizeof(int));
562+
ungetBuffer->buffer = eMalloc(8 * sizeof(*(ungetBuffer->buffer)));
563563
ungetBuffer->size = 8;
564564
}
565565
Assert(ungetBuffer->size > 0);
@@ -578,8 +578,8 @@ static void ungetBufferUngetc (ungetBuffer *ungetBuffer, const int c, vString *c
578578
if(ungetBuffer->pointer == ungetBuffer->buffer)
579579
{
580580
ungetBuffer->size += 8;
581-
int * tmp = (int *)eMalloc(ungetBuffer->size * sizeof(int));
582-
memcpy(tmp+8,ungetBuffer->pointer,ungetBuffer->dataSize * sizeof(int));
581+
unsigned char * tmp = eMalloc(ungetBuffer->size * sizeof(*(ungetBuffer->buffer)));
582+
memcpy(tmp+8,ungetBuffer->pointer,ungetBuffer->dataSize * sizeof(*(ungetBuffer->buffer)));
583583
eFree(ungetBuffer->buffer);
584584
ungetBuffer->buffer = tmp;
585585
ungetBuffer->pointer = tmp + 7;
@@ -609,11 +609,12 @@ static void ungetBufferUngetString(ungetBuffer *ungetBuffer, const char * string
609609
if(!ungetBuffer->buffer)
610610
{
611611
ungetBuffer->size = 8 + len;
612-
ungetBuffer->buffer = (int *)eMalloc(ungetBuffer->size * sizeof(int));
612+
ungetBuffer->buffer = eMalloc(ungetBuffer->size * sizeof(*(ungetBuffer->buffer)));
613613
} else if(ungetBuffer->size < len)
614614
{
615615
ungetBuffer->size = 8 + len;
616-
ungetBuffer->buffer = (int *)eRealloc(ungetBuffer->buffer,ungetBuffer->size * sizeof(int));
616+
ungetBuffer->buffer = eRealloc(ungetBuffer->buffer,
617+
ungetBuffer->size * sizeof(*(ungetBuffer->buffer)));
617618
}
618619
ungetBuffer->pointer = ungetBuffer->buffer + ungetBuffer->size - len;
619620
} else {
@@ -626,8 +627,8 @@ static void ungetBufferUngetString(ungetBuffer *ungetBuffer, const char * string
626627
if(ungetBuffer->size < (ungetBuffer->dataSize + len))
627628
{
628629
ungetBuffer->size = 8 + len + ungetBuffer->dataSize;
629-
int * tmp = (int *)eMalloc(ungetBuffer->size * sizeof(int));
630-
memcpy(tmp + 8 + len,ungetBuffer->pointer,ungetBuffer->dataSize * sizeof(int));
630+
unsigned char * tmp = eMalloc(ungetBuffer->size * sizeof(*(ungetBuffer->buffer)));
631+
memcpy(tmp + 8 + len,ungetBuffer->pointer,ungetBuffer->dataSize * sizeof(*(ungetBuffer->buffer)));
631632
eFree(ungetBuffer->buffer);
632633
ungetBuffer->buffer = tmp;
633634
ungetBuffer->pointer = tmp + 8;
@@ -637,7 +638,7 @@ static void ungetBufferUngetString(ungetBuffer *ungetBuffer, const char * string
637638
}
638639
}
639640

640-
int * p = ungetBuffer->pointer;
641+
unsigned char* p = ungetBuffer->pointer;
641642
const char * s = string;
642643
const char * e = string + len;
643644

@@ -656,11 +657,6 @@ static int ungetBufferGetcFromUngetBuffer (ungetBuffer *ungetBuffer)
656657
Assert(ungetBuffer->dataSize > 0);
657658

658659
int c = *(ungetBuffer->pointer);
659-
660-
/* We allow putting only non-negative values to
661-
* the ungetc-buffer. */
662-
Assert(c >= 0);
663-
664660
ungetBuffer->dataSize--;
665661
if(ungetBuffer->dataSize > 0)
666662
ungetBuffer->pointer++;

0 commit comments

Comments
 (0)