[geany/geany] 78a26a: build.c: Replace return_cmd_if macros with simpler BREAK_IF_CMD macro

Nick Treleaven git-noreply at xxxxx
Sat Oct 5 11:31:09 UTC 2019


Branch:      refs/heads/build-exec
Author:      Nick Treleaven <n at trelsoft.com>
Committer:   Nick Treleaven <n at trelsoft.com>
Date:        Sat, 05 Oct 2019 11:31:09 UTC
Commit:      78a26acdde019b315d3474f392a0ad9ea5cf52c1
             https://github.com/geany/geany/commit/78a26acdde019b315d3474f392a0ad9ea5cf52c1

Log Message:
-----------
build.c: Replace return_cmd_if macros with simpler BREAK_IF_CMD macro

Use GeanyFiletypePrivate empty_ftp to avoid checking for NULL filetype.
Rename get_next_build_cmd() `from` parameter to psrc.


Modified Paths:
--------------
    src/build.c

Modified: src/build.c
94 lines changed, 43 insertions(+), 51 deletions(-)
===================================================================
@@ -349,84 +349,76 @@ static void printfcmds(void)
 }
 
 
-/* macros to save typing and make the logic visible */
-#define return_cmd_if(src, cmds)\
-	if (cmds != NULL && cmds[cmdindex].exists && below>src)\
-	{ \
-		*fr=src; \
-		if (printbuildcmds) \
-			printf("cmd[%u,%u]=%u\n",cmdgrp,cmdindex,src); \
-		return &(cmds[cmdindex]); \
-	}
-
-#define return_ft_cmd_if(src, cmds)\
-	if (ft != NULL && ft->priv->cmds != NULL \
-		&& ft->priv->cmds[cmdindex].exists && below>src)\
-		{ \
-			*fr=src; \
-			if (printbuildcmds) \
-				printf("cmd[%u,%u]=%u\n",cmdgrp,cmdindex,src); \
-			return &(ft->priv->cmds[cmdindex]); \
-		}
-
+// Note: reads below and cmdindex parameters
+#define BREAK_IF_CMD(src, cmds, outsrc, outcmds) \
+	if ((src) < (below) && (cmds) != NULL && (cmds)[cmdindex].exists) \
+	{	outsrc = src; \
+		outcmds = cmds; \
+		break; \
+	}
 
-/* get the next lowest command taking priority into account */
-static GeanyBuildCommand *get_next_build_cmd(GeanyDocument *doc, guint cmdgrp, guint cmdindex,
-											 guint below, guint *from)
+/* get the next lowest command taking priority into account
+ * below = only consider GeanyBuildSource values less than this parameter
+ * psrc = Address to write GeanyBuildSource */
+static GeanyBuildCommand *get_next_build_cmd(GeanyDocument *doc,
+	guint cmdgrp, guint cmdindex, guint below, guint *psrc)
 {
-	/* Note: parameter below used in macros above */
-	GeanyFiletype *ft = NULL;
-	guint sink, *fr = &sink;
-
 	g_return_val_if_fail(doc == NULL || doc->is_valid, NULL);
 
 	if (printbuildcmds)
 		printfcmds();
 	if (cmdgrp >= GEANY_GBG_COUNT)
 		return NULL;
-	if (from != NULL)
-		fr = from;
 	if (doc == NULL)
 		doc = document_get_current();
-	if (doc != NULL)
-		ft = doc->file_type;
+	
+	GeanyFiletypePrivate empty_ftp = {}, *ftp =
+		doc ? doc->file_type->priv : &empty_ftp; // avoid checking for null
+	GeanyBuildSource src;
+	GeanyBuildCommand *cmds = NULL;
 
 	switch (cmdgrp)
 	{
 		case GEANY_GBG_FT: /* order proj ft, home ft, ft, defft */
-			if (ft != NULL)
-			{
-				return_ft_cmd_if(GEANY_BCS_PROJ, projfilecmds);
-				return_ft_cmd_if(GEANY_BCS_PREF, homefilecmds);
-				return_ft_cmd_if(GEANY_BCS_FT, filecmds);
-			}
-			return_cmd_if(GEANY_BCS_DEF, ft_def);
+			BREAK_IF_CMD(GEANY_BCS_PROJ,	ftp->projfilecmds,	src, cmds);
+			BREAK_IF_CMD(GEANY_BCS_PREF,	ftp->homefilecmds,	src, cmds);
+			BREAK_IF_CMD(GEANY_BCS_FT,		ftp->filecmds,		src, cmds);
+			BREAK_IF_CMD(GEANY_BCS_DEF,		ft_def,				src, cmds);
 			break;
 		case GEANY_GBG_NON_FT: /* order proj, pref, def */
-			return_cmd_if(GEANY_BCS_PROJ, non_ft_proj);
-			return_cmd_if(GEANY_BCS_PREF, non_ft_pref);
-			return_ft_cmd_if(GEANY_BCS_FT, ftdefcmds);
-			return_cmd_if(GEANY_BCS_DEF, non_ft_def);
+			BREAK_IF_CMD(GEANY_BCS_PROJ,	non_ft_proj,		src, cmds);
+			BREAK_IF_CMD(GEANY_BCS_PREF,	non_ft_pref,		src, cmds);
+			BREAK_IF_CMD(GEANY_BCS_FT,		ftp->ftdefcmds,		src, cmds);
+			BREAK_IF_CMD(GEANY_BCS_DEF,		non_ft_def,			src, cmds);
 			break;
 		case GEANY_GBG_EXEC: /* order proj, proj ft, pref, home ft, ft, def */
-			return_cmd_if(GEANY_BCS_PROJ, exec_proj);
-			return_ft_cmd_if(GEANY_BCS_PROJ_FT, projexeccmds);
-			return_cmd_if(GEANY_BCS_PREF, exec_pref);
-			return_ft_cmd_if(GEANY_BCS_FT, homeexeccmds);
-			return_ft_cmd_if(GEANY_BCS_FT, execcmds);
-			return_cmd_if(GEANY_BCS_DEF, exec_def);
+			BREAK_IF_CMD(GEANY_BCS_PROJ,	exec_proj,			src, cmds);
+			BREAK_IF_CMD(GEANY_BCS_PROJ_FT,	ftp->projexeccmds,	src, cmds);
+			BREAK_IF_CMD(GEANY_BCS_PREF,	exec_pref,			src, cmds);
+			BREAK_IF_CMD(GEANY_BCS_FT,		ftp->homeexeccmds,	src, cmds);
+			BREAK_IF_CMD(GEANY_BCS_FT,		ftp->execcmds,		src, cmds);
+			BREAK_IF_CMD(GEANY_BCS_DEF,		exec_def,			src, cmds);
 			break;
 		default:
-			break;
+			return NULL;
+	}
+	if (cmds != NULL)
+	{
+		if (psrc)
+			*psrc = src;
+		if (printbuildcmds)
+			printf("cmd[%u,%u]=%u\n", cmdgrp, cmdindex, src);
+		return &(cmds[cmdindex]);
 	}
 	return NULL;
 }
 
 
 /* shortcut to start looking at the top */
-static GeanyBuildCommand *get_build_cmd(GeanyDocument *doc, guint grp, guint cmdindex, guint *from)
+// Note: could remove psrc parameter, only passed once
+static GeanyBuildCommand *get_build_cmd(GeanyDocument *doc, guint grp, guint cmdindex, guint *psrc)
 {
-	return get_next_build_cmd(doc, grp, cmdindex, GEANY_BCS_COUNT, from);
+	return get_next_build_cmd(doc, grp, cmdindex, GEANY_BCS_COUNT, psrc);
 }
 
 



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