summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTing-Wei Lan <lantw44@gmail.com>2015-11-13 16:10:09 +0800
committerTing-Wei Lan <lantw44@gmail.com>2015-11-13 16:41:06 +0800
commit5017c802e8aeda0d61715d2566f6a866311b63e3 (patch)
tree9249a4cd867e6d51cb6ebdc206c7fc87281c100e
parent3c8d9314f05ee784886bac4598e5e30bc053a4fc (diff)
downloadcompiler2015-5017c802e8aeda0d61715d2566f6a866311b63e3.tar
compiler2015-5017c802e8aeda0d61715d2566f6a866311b63e3.tar.gz
compiler2015-5017c802e8aeda0d61715d2566f6a866311b63e3.tar.bz2
compiler2015-5017c802e8aeda0d61715d2566f6a866311b63e3.tar.lz
compiler2015-5017c802e8aeda0d61715d2566f6a866311b63e3.tar.xz
compiler2015-5017c802e8aeda0d61715d2566f6a866311b63e3.tar.zst
compiler2015-5017c802e8aeda0d61715d2566f6a866311b63e3.zip
Fix the build with --enable-compile-warnings=error
1. Add missing 'const' keyword for string literals. 2. Add missing 'static' keyword for internal functions. 3. Add missing default cases for switch statements.
-rw-r--r--src/ast.h3
-rw-r--r--src/draw.c67
-rw-r--r--src/main.c2
3 files changed, 41 insertions, 31 deletions
diff --git a/src/ast.h b/src/ast.h
index ada37f4..891d869 100644
--- a/src/ast.h
+++ b/src/ast.h
@@ -176,4 +176,7 @@ AST_NODE* makeDeclNode(DECL_KIND declKind);
AST_NODE* makeExprNode(EXPR_KIND exprKind, int operationEnumValue);
void semanticAnalysis(AST_NODE *root);
+// Functions exported by draw.c
+void printGV(AST_NODE *root, const char* fileName);
+
#endif
diff --git a/src/draw.c b/src/draw.c
index adcf55b..82ef484 100644
--- a/src/draw.c
+++ b/src/draw.c
@@ -1,21 +1,21 @@
/* 2015/10 functions to support printGV() */
#include "ast.h"
+#include <assert.h>
+#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
-char *AST_TYPE_string[] = {"PROGRAM", "GLOBAL_DECL_LIST", "GLOBAL_DECL", "DECL_LIST", "FUNCTION_DECL", "PARAM_LIST", "PARAM", "DIM_FN", "DIMFN1", "EXPR_NULL", "BLOCK", "DECL", "TYPE_DECL", "VAR_DECL",
+const char *AST_TYPE_string[] = {"PROGRAM", "GLOBAL_DECL_LIST", "GLOBAL_DECL", "DECL_LIST", "FUNCTION_DECL", "PARAM_LIST", "PARAM", "DIM_FN", "DIMFN1", "EXPR_NULL", "BLOCK", "DECL", "TYPE_DECL", "VAR_DECL",
"TYPE", "STRUCT_TYPE", "DEF_LIST", "DEF", "OPT_TAG", "TAG", "ID_LIST", "DIM_DECL", "CEXPR", "MCEXPR", "CFACTOR", "INIT_ID_LIST", "INIT_ID", "STMT_LIST", "STMT", "ASSIGN_EXPR_LIST",
"NONEMPTY_ASSIGN_EXPR_LIST", "TEST", "ASSIGN_EXPR", "RELOP_EXPR", "RELOP_TERM", "RELOP_FACTOR", "REL_OP", "RELOP_EXPR_LIST", "NONEMPTY_RELOP_EXPR_LIST", "EXPR", "ADD_OP", "TERM",
"MUL_OP", "FACTOR", "VAR_REF", "DIM", "STRUCT_TAIL", "NUL","ID_value", "CONST_value"};
-int printGVNode(FILE *fp, AST_NODE* node, int count);
-
-char *printLabelString(FILE *fp, AST_NODE *astNode)
+static void printLabelString(FILE *fp, AST_NODE *astNode)
{
- char *binaryOpString[] = {
+ const char *binaryOpString[] = {
"+",
"-",
"*",
@@ -29,7 +29,7 @@ char *printLabelString(FILE *fp, AST_NODE *astNode)
"&&",
"||"
};
- char *unaryOpString[] = {
+ const char *unaryOpString[] = {
"+",
"-",
"!"
@@ -54,6 +54,8 @@ char *printLabelString(FILE *fp, AST_NODE *astNode)
case FUNCTION_PARAMETER_DECL:
fprintf(fp, "FUNCTION_PARAMETER_DECL");
break;
+ default:
+ assert(false);
}
break;
case IDENTIFIER_NODE:
@@ -69,6 +71,8 @@ char *printLabelString(FILE *fp, AST_NODE *astNode)
case WITH_INIT_ID:
fprintf(fp, "WITH_INIT_ID");
break;
+ default:
+ assert(false);
}
break;
case PARAM_LIST_NODE:
@@ -107,6 +111,8 @@ char *printLabelString(FILE *fp, AST_NODE *astNode)
case RETURN_STMT:
fprintf(fp, "RETURN_STMT");
break;
+ default:
+ assert(false);
}
break;
case EXPR_NODE:
@@ -118,6 +124,8 @@ char *printLabelString(FILE *fp, AST_NODE *astNode)
case UNARY_OPERATION:
fprintf(fp, "%s", unaryOpString[astNode->semantic_value.exprSemanticValue.op.unaryOp]);
break;
+ default:
+ assert(false);
}
break;
case CONST_VALUE_NODE:
@@ -135,6 +143,8 @@ char *printLabelString(FILE *fp, AST_NODE *astNode)
astNode->semantic_value.const1->const_u.sc[strlen(astNode->semantic_value.const1->const_u.sc)] = '"';
astNode->semantic_value.const1->const_u.sc[strlen(astNode->semantic_value.const1->const_u.sc) + 1] = 0;
break;
+ default:
+ assert(false);
}
break;
case NONEMPTY_ASSIGN_EXPR_LIST_NODE:
@@ -149,31 +159,9 @@ char *printLabelString(FILE *fp, AST_NODE *astNode)
}
}
-void printGV(AST_NODE *root, char* fileName)
-{
- if (fileName == NULL) {
- fileName = "AST_Graph.gv";
- }
- FILE *fp;
- fp = fopen(fileName, "w");
- if (!fp) {
- printf("Cannot open file \"%s\"\n", fileName);
- return;
- }
- fprintf(fp , "Digraph AST\n");
- fprintf(fp , "{\n");
- fprintf(fp , "label = \"%s\"\n", fileName);
-
- int nodeCount = 0;
- printGVNode(fp, root, nodeCount);
-
- fprintf(fp , "}\n");
- fclose(fp);
-}
-
// count: the (unused) id number to be used
// return: then next unused id number
-int printGVNode(FILE *fp, AST_NODE* node, int count)
+static int printGVNode(FILE *fp, AST_NODE* node, int count)
{
if (node == NULL) {
return count;
@@ -199,3 +187,24 @@ int printGVNode(FILE *fp, AST_NODE* node, int count)
return countAfterCheckSibling;
}
+void printGV(AST_NODE *root, const char* fileName)
+{
+ if (fileName == NULL) {
+ fileName = "AST_Graph.gv";
+ }
+ FILE *fp;
+ fp = fopen(fileName, "w");
+ if (!fp) {
+ printf("Cannot open file \"%s\"\n", fileName);
+ return;
+ }
+ fprintf(fp , "Digraph AST\n");
+ fprintf(fp , "{\n");
+ fprintf(fp , "label = \"%s\"\n", fileName);
+
+ int nodeCount = 0;
+ printGVNode(fp, root, nodeCount);
+
+ fprintf(fp , "}\n");
+ fclose(fp);
+}
diff --git a/src/main.c b/src/main.c
index 43ba73d..4b46032 100644
--- a/src/main.c
+++ b/src/main.c
@@ -6,8 +6,6 @@
extern FILE *yyin;
extern AST_NODE *prog;
-void printGV(AST_NODE *root, char* fileName);
-
int main (int argc, char **argv)
{
if (argc != 2) {