[geany/geany] 29000c: Always parse buffer instead of file

Jiří Techet git-noreply at xxxxx
Wed Nov 5 20:50:07 UTC 2014


Branch:      refs/heads/master
Author:      Jiří Techet <techet at gmail.com>
Committer:   Jiří Techet <techet at gmail.com>
Date:        Wed, 05 Nov 2014 20:50:07 UTC
Commit:      29000cf10465ab739e688eee711ba14ecfbfba7f
             https://github.com/geany/geany/commit/29000cf10465ab739e688eee711ba14ecfbfba7f

Log Message:
-----------
Always parse buffer instead of file

This brings the linux kernel parsing time from about 20s to 12s on my machine.


Modified Paths:
--------------
    tagmanager/src/tm_source_file.c

Modified: tagmanager/src/tm_source_file.c
34 lines changed, 18 insertions(+), 16 deletions(-)
===================================================================
@@ -253,15 +253,27 @@ gboolean tm_source_file_parse(TMSourceFile *source_file, guchar* text_buf, gint
 		g_warning("Attempt to parse NULL file");
 		return FALSE;
 	}
+	
+	file_name = source_file->file_name;
+	
+	if (!use_buffer)
+	{
+		if (!g_file_get_contents(file_name, (gchar**)&text_buf, (gsize*)&buf_size, NULL))
+		{
+			g_warning("Unable to open %s", file_name);
+			return FALSE;
+		}
+	}
 
-	if (use_buffer && (NULL == text_buf || 0 == buf_size))
+	if (NULL == text_buf || 0 == buf_size)
 	{
 		/* Empty buffer, "parse" by setting empty tag array */
 		tm_tags_array_free(source_file->tags_array, FALSE);
+		if (!use_buffer)
+			g_free(text_buf);
 		return TRUE;
 	}
 
-	file_name = source_file->file_name;
 	if (NULL == LanguageTable)
 	{
 		initializeParsing();
@@ -292,7 +304,7 @@ gboolean tm_source_file_parse(TMSourceFile *source_file, guchar* text_buf, gint
 		while (retry && passCount < 3)
 		{
 			tm_tags_array_free(source_file->tags_array, FALSE);
-			if (use_buffer && bufferOpen (text_buf, buf_size, file_name, source_file->lang))
+			if (bufferOpen (text_buf, buf_size, file_name, source_file->lang))
 			{
 				if (LanguageTable [source_file->lang]->parser != NULL)
 				{
@@ -305,19 +317,6 @@ gboolean tm_source_file_parse(TMSourceFile *source_file, guchar* text_buf, gint
 					retry = LanguageTable [source_file->lang]->parser2 (passCount);
 				bufferClose ();
 			}
-			else if (!use_buffer && fileOpen (file_name, source_file->lang))
-			{
-				if (LanguageTable [source_file->lang]->parser != NULL)
-				{
-					LanguageTable [source_file->lang]->parser ();
-					fileClose ();
-					retry = FALSE;
-					break;
-				}
-				else if (LanguageTable [source_file->lang]->parser2 != NULL)
-					retry = LanguageTable [source_file->lang]->parser2 (passCount);
-				fileClose ();
-			}
 			else
 			{
 				g_warning("Unable to open %s", file_name);
@@ -326,6 +325,9 @@ gboolean tm_source_file_parse(TMSourceFile *source_file, guchar* text_buf, gint
 			++ passCount;
 		}
 	}
+	
+	if (!use_buffer)
+		g_free(text_buf);
 	return !retry;
 }
 



--------------
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