[geany/geany] b975c2: read: Allow to unget up to 3 characters

Colomban Wendling git-noreply at xxxxx
Sun Jun 14 15:57:18 UTC 2015


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Sun, 14 Jun 2015 15:57:18 UTC
Commit:      b975c2652da201c9e84f4b817c18408814364f36
             https://github.com/geany/geany/commit/b975c2652da201c9e84f4b817c18408814364f36

Log Message:
-----------
read: Allow to unget up to 3 characters

Some parsers need to unget more than one characters, so add support for
this.

X-Universal-CTags-Commit-ID: 956af0555d3a8ef33304c5ae6ed873f22b4e4284


Modified Paths:
--------------
    tagmanager/ctags/read.c
    tagmanager/ctags/read.h

Modified: tagmanager/ctags/read.c
12 lines changed, 8 insertions(+), 4 deletions(-)
===================================================================
@@ -428,7 +428,12 @@ static int iFileGetc (void)
 
 extern void fileUngetc (int c)
 {
-    File.ungetch = c;
+    const size_t len = sizeof File.ungetchBuf / sizeof File.ungetchBuf[0];
+
+    Assert (File.ungetchIdx < len);
+    /* we cannot rely on the assertion that might be disabled in non-debug mode */
+    if (File.ungetchIdx < len)
+	File.ungetchBuf[File.ungetchIdx++] = c;
 }
 
 static vString *iFileGetLine (void)
@@ -468,10 +473,9 @@ extern int fileGetc (void)
      *	other processing on it, though, because we already did that the
      *	first time it was read through fileGetc ().
      */
-    if (File.ungetch != '\0')
+    if (File.ungetchIdx > 0)
     {
-	c = File.ungetch;
-	File.ungetch = '\0';
+	c = File.ungetchBuf[--File.ungetchIdx];
 	return c;	    /* return here to avoid re-calling debugPutc () */
     }
     do


Modified: tagmanager/ctags/read.h
3 lines changed, 2 insertions(+), 1 deletions(-)
===================================================================
@@ -70,7 +70,8 @@ typedef struct sInputFile {
     MIO		*mio;		/* stream used for reading the file */
     unsigned long lineNumber;	/* line number in the input file */
     MIOPos	filePosition;	/* file position of current line */
-    int		ungetch;	/* a single character that was ungotten */
+    unsigned int ungetchIdx;
+    int		ungetchBuf[3];	/* characters that were ungotten */
     boolean	eof;		/* have we reached the end of file? */
     boolean	newLine;	/* will the next character begin a new line? */
 



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list