summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTing-Wei Lan <lantw44@gmail.com>2015-12-09 21:04:19 +0800
committerTing-Wei Lan <lantw44@gmail.com>2015-12-09 21:04:19 +0800
commit308b49b1c30e669521bf015b1be6fb6eb6c45348 (patch)
treede5c7a7773d94eed59bd54ff6e634ae3854a5531
parentcca82cff47f01e32a1faf7c20b9a487ab6183187 (diff)
downloadcompiler2015-308b49b1c30e669521bf015b1be6fb6eb6c45348.tar
compiler2015-308b49b1c30e669521bf015b1be6fb6eb6c45348.tar.gz
compiler2015-308b49b1c30e669521bf015b1be6fb6eb6c45348.tar.bz2
compiler2015-308b49b1c30e669521bf015b1be6fb6eb6c45348.tar.lz
compiler2015-308b49b1c30e669521bf015b1be6fb6eb6c45348.tar.xz
compiler2015-308b49b1c30e669521bf015b1be6fb6eb6c45348.tar.zst
compiler2015-308b49b1c30e669521bf015b1be6fb6eb6c45348.zip
Draw computed types stored in AST
-rw-r--r--src/draw.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/draw.c b/src/draw.c
index d918230..9eff352 100644
--- a/src/draw.c
+++ b/src/draw.c
@@ -11,6 +11,38 @@
#include <string.h>
+static void print_ast_value(FILE *fp, CcmmcAstValueType type) {
+ putc(' ', fp);
+ switch (type) {
+ case CCMMC_AST_VALUE_INT:
+ fprintf(fp, "<int>");
+ break;
+ case CCMMC_AST_VALUE_FLOAT:
+ fprintf(fp, "<float>");
+ break;
+ case CCMMC_AST_VALUE_VOID:
+ fprintf(fp, "<void>");
+ break;
+ case CCMMC_AST_VALUE_INT_PTR:
+ fprintf(fp, "<int*>");
+ break;
+ case CCMMC_AST_VALUE_FLOAT_PTR:
+ fprintf(fp, "<float*>");
+ break;
+ case CCMMC_AST_VALUE_CONST_STRING:
+ fprintf(fp, "<const char*>");
+ break;
+ case CCMMC_AST_VALUE_NONE:
+ fprintf(fp, "<none>");
+ break;
+ case CCMMC_AST_VALUE_ERROR:
+ fprintf(fp, "<error>");
+ break;
+ default:
+ assert(false);
+ }
+}
+
static void printLabelString(FILE *fp, CcmmcAst *astNode)
{
const char *binaryOpString[] = {
@@ -71,6 +103,7 @@ static void printLabelString(FILE *fp, CcmmcAst *astNode)
default:
assert(false);
}
+ print_ast_value(fp, astNode->type_value);
break;
case CCMMC_AST_NODE_PARAM_LIST:
fprintf(fp, "PARAM_LIST_NODE");
@@ -104,6 +137,7 @@ static void printLabelString(FILE *fp, CcmmcAst *astNode)
break;
case CCMMC_KIND_STMT_FUNCTION_CALL:
fprintf(fp, "FUNCTION_CALL_STMT");
+ print_ast_value(fp, astNode->type_value);
break;
case CCMMC_KIND_STMT_RETURN:
fprintf(fp, "RETURN_STMT");
@@ -124,6 +158,7 @@ static void printLabelString(FILE *fp, CcmmcAst *astNode)
default:
assert(false);
}
+ print_ast_value(fp, astNode->type_value);
break;
case CCMMC_AST_NODE_CONST_VALUE:
fprintf(fp, "CONST_VALUE_NODE ");
@@ -141,6 +176,7 @@ static void printLabelString(FILE *fp, CcmmcAst *astNode)
default:
assert(false);
}
+ print_ast_value(fp, astNode->type_value);
break;
case CCMMC_AST_NODE_NONEMPTY_ASSIGN_EXPR_LIST:
fprintf(fp, "NONEMPTY_ASSIGN_EXPR_LIST_NODE");