[geany/geany] f89e9f: read: Add function to initialize common parts of input/source files and use it

Jiří Techet git-noreply at xxxxx
Mon Dec 17 21:05:49 UTC 2018


Branch:      refs/heads/master
Author:      Jiří Techet <techet at gmail.com>
Committer:   Jiří Techet <techet at gmail.com>
Date:        Tue, 11 Oct 2016 14:59:10 UTC
Commit:      f89e9f8014674a330c44a2b88512d0c56bc93f8f
             https://github.com/geany/geany/commit/f89e9f8014674a330c44a2b88512d0c56bc93f8f

Log Message:
-----------
read: Add function to initialize common parts of input/source files and use it

Also correct input/source file usage in the file and initialize everything
like in universal-ctags.


Modified Paths:
--------------
    ctags/main/read.c

Modified: ctags/main/read.c
105 lines changed, 67 insertions(+), 38 deletions(-)
===================================================================
@@ -146,7 +146,7 @@ extern MIOPos getInputFilePositionForLine (int line)
 
 extern langType getInputLanguage (void)
 {
-	return File.source.language;
+	return File.input.language;
 }
 
 extern const char *getInputLanguageName (void)
@@ -156,7 +156,7 @@ extern const char *getInputLanguageName (void)
 
 extern const char *getInputFileTagPath (void)
 {
-	return vStringValue (File.source.tagPath);
+	return vStringValue (File.input.tagPath);
 }
 
 extern bool isInputLanguage (langType lang)
@@ -183,7 +183,7 @@ extern bool doesInputLanguageAllowNullTag (void)
 
 extern kindOption *getInputLanguageFileKind (void)
 {
-	return getLanguageFileKind (File.input.language);
+	return getLanguageFileKind (getInputLanguage ());
 }
 
 extern bool doesInputLanguageRequestAutomaticFQTag (void)
@@ -207,27 +207,39 @@ extern unsigned long getSourceLineNumber (void)
 	return File.source.lineNumber;
 }
 
+static void freeInputFileInfo (inputFileInfo *finfo)
+{
+	if (finfo->name)
+	{
+		vStringDelete (finfo->name);
+		finfo->name = NULL;
+	}
+	if (finfo->tagPath)
+	{
+		vStringDelete (finfo->tagPath);
+		finfo->tagPath = NULL;
+	}
+}
+
 extern void freeInputFileResources (void)
 {
-	vStringDelete (File.input.name);
-	vStringDelete (File.path);
-	vStringDelete (File.source.name);
-	vStringDelete (File.line);
+	if (File.path != NULL)
+		vStringDelete (File.path);
+	if (File.line != NULL)
+		vStringDelete (File.line);
+	freeInputFileInfo (&File.input);
+	freeInputFileInfo (&File.source);
 }
 
 /*
  *   Input file access functions
  */
 
-static void setInputFileName (const char *const fileName)
+static void setOwnerDirectoryOfInputFile (const char *const fileName)
 {
 	const char *const head = fileName;
 	const char *const tail = baseFilename (head);
 
-	if (File.input.name != NULL)
-		vStringDelete (File.input.name);
-	File.input.name = vStringNewInit (fileName);
-
 	if (File.path != NULL)
 		vStringDelete (File.path);
 	if (tail == head)
@@ -239,34 +251,49 @@ static void setInputFileName (const char *const fileName)
 		vStringNCopyS (File.path, fileName, length);
 	}
 }
-static void setSourceFileParameters (vString *const fileName, const langType language)
+
+static void setInputFileParametersCommon (inputFileInfo *finfo, vString *const fileName,
+					  const langType language,
+					  stringList *holder)
 {
-	if (File.source.name != NULL)
-		vStringDelete (File.source.name);
-	if (File.input.name != NULL)
-		vStringDelete (File.input.name);
-	File.source.name = fileName;
-	File.input.name = vStringNewCopy(fileName);
+	if (finfo->name != NULL)
+		vStringDelete (finfo->name);
+	finfo->name = fileName;
 
-	if (File.source.tagPath != NULL)
-		eFree (File.source.tagPath);
+	if (finfo->tagPath != NULL)
+	{
+		if (holder)
+			stringListAdd (holder, finfo->tagPath);
+		else
+			vStringDelete (finfo->tagPath);
+	}
 	if (! Option.tagRelative || isAbsolutePath (vStringValue (fileName)))
-		File.source.tagPath = vStringNewCopy (fileName);
+		finfo->tagPath = vStringNewCopy (fileName);
 	else
-		File.source.tagPath =
+		finfo->tagPath =
 				vStringNewOwn (relativeFilename (vStringValue (fileName),
-								getTagFileDirectory ()));
+								 getTagFileDirectory ()));
 
-	if (vStringLength (fileName) > maxTagsLine ())
-		setMaxTagsLine (vStringLength (fileName));
+	finfo->isHeader = isIncludeFile (vStringValue (fileName));
 
-	File.source.isHeader = isIncludeFile (vStringValue (fileName));
-	File.input.isHeader = File.source.isHeader;
 	if (language != -1)
-		File.source.language = language;
+		finfo->language = language;
 	else
-		File.source.language = getFileLanguage (vStringValue (fileName));
-	File.input.language = File.source.language;
+		finfo->language = getFileLanguage (vStringValue (fileName));
+}
+
+static void setInputFileParameters (vString *const fileName, const langType language)
+{
+	setInputFileParametersCommon (&File.input, fileName,
+				      language,
+				      NULL);
+}
+
+static void setSourceFileParameters (vString *const fileName, const langType language)
+{
+	setInputFileParametersCommon (&File.source, fileName,
+				      language,
+				      File.sourceTagPathHolder);
 }
 
 static bool setSourceFileName (vString *const fileName)
@@ -284,7 +311,7 @@ static bool setSourceFileName (vString *const fileName)
 				vStringValue (File.path), vStringValue (fileName));
 			pathName = vStringNewOwn (tmp);
 		}
-		setSourceFileParameters (pathName, -1);
+		setSourceFileParameters (pathName, language);
 		result = true;
 	}
 	return result;
@@ -461,21 +488,24 @@ extern bool openInputFile (const char *const fileName, const langType language,
 	{
 		opened = true;
 
-		setInputFileName (fileName);
+		setOwnerDirectoryOfInputFile (fileName);
 		mio_getpos (File.mio, &StartOfLine);
 		mio_getpos (File.mio, &File.filePosition);
 		File.currentLine  = NULL;
-		File.input.lineNumber   = 0L;
 
 		if (File.line != NULL)
 			vStringClear (File.line);
 
+		setInputFileParameters  (vStringNewInit (fileName), language);
+		File.input.lineNumberOrigin = 0L;
+		File.input.lineNumber = File.input.lineNumberOrigin;
 		setSourceFileParameters (vStringNewInit (fileName), language);
-		File.source.lineNumber = 0L;
+		File.source.lineNumberOrigin = 0L;
+		File.source.lineNumber = File.source.lineNumberOrigin;
 
 		verbose ("OPENING %s as %s language %sfile\n", fileName,
 				getLanguageName (language),
-				File.source.isHeader ? "include " : "");
+				File.input.isHeader ? "include " : "");
 	}
 	return opened;
 }
@@ -508,7 +538,6 @@ extern void closeInputFile (void)
 			fileStatus *status = eStat (vStringValue (File.input.name));
 			addTotals (0, File.input.lineNumber - 1L, status->size);
 		}
-
 		mio_free (File.mio);
 		File.mio = NULL;
 	}
@@ -584,7 +613,7 @@ static vString *iFileGetLine (void)
 
 		if (Option.lineDirectives && vStringChar (File.line, 0) == '#')
 			parseLineDirective (vStringValue (File.line) + 1);
-		matchRegex (File.line, File.source.language);
+		matchRegex (File.line, getInputLanguage ());
 
 		return File.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