Changeset: 74bf74a4d525 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/74bf74a4d525
Modified Files:
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_gencode.h
Branch: nested
Log Message:
Introduces helper function for printing stmt st_lists
diffs (88 lines):
diff --git a/sql/backends/monet5/sql_gencode.c
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -1725,6 +1725,73 @@ void
_exp_print(sql, n->data);
}
+enum tree_glyphs {
+ TG_DOT = 0, // ●_
+ TG_BIF, // ├─
+ TG_COL, // │_
+ TG_END, // ╰─
+ TG_SPC, // __
+ TG_MAX
+} tglyphs;
+
+char *tg[TG_MAX] = {"\U000025cf ",
+ "\U0000251c\U00002500",
+ "\U00002502 ",
+ "\U00002570\U00002500",
+ " "};
+
+static void _stmt_print_list_(stmt *s, size_t depth, size_t *lvls, bool last);
+
+static void
+_stmt_print_list_(stmt *s, size_t depth, size_t *lvls, bool last)
+{
+ if (depth < 8*sizeof(size_t) && !last)
+ (*lvls) |= (1<<depth);
+
+ for (size_t msk = 1, i = 0; msk && i < depth; msk <<= 1, i++)
+ mnstr_printf(GDKstdout, "%s", ((*lvls)&msk)?tg[TG_COL]:tg[TG_SPC]);
+
+ char *node_prefix = last?tg[TG_END]:tg[TG_BIF];
+ switch (s->type) {
+ case st_list:
+ mnstr_printf(GDKstdout, "%s%sst_list (X_%d)\n",
+ node_prefix, tg[TG_DOT], s->nr);
+ for (node *n = s->op4.lval->h; n; n = n->next)
+ _stmt_print_list_(n->data, depth+1, lvls, (n ==
s->op4.lval->t));
+ break;
+ case st_append_bulk:
+ mnstr_printf(GDKstdout, "%s%sst_append_bulk (X_%d)\n",
+ node_prefix, tg[TG_DOT], s->nr);
+ break;
+ case st_alias:
+ mnstr_printf(GDKstdout, "%s%sst_alias (X_%d)\n",
+ node_prefix, tg[TG_DOT], s->nr);
+ _stmt_print_list_(s->op1, depth+1, lvls, true);
+ break;
+ default:
+ mnstr_printf(GDKstdout, "%s%sUNKNOWN stmt type=%d (X_%d)\n",
+ node_prefix, tg[TG_DOT], s->type, s->nr);
+ break;
+ }
+ if (depth < 8*sizeof(size_t) && !last)
+ (*lvls) ^= (1<<depth);
+}
+
+void _stmt_print_list(stmt *sl);
+
+void
+_stmt_print_list(stmt *sl)
+{
+ if (sl->type != st_list) {
+ mnstr_printf(GDKstdout, "WARNING: not st_list statement\n");
+ return;
+ }
+ mnstr_printf(GDKstdout, "%sst_list (X_%d)\n", tg[TG_DOT], sl->nr);
+ size_t lvls = 1;
+ for (node *n = sl->op4.lval->h; n; n = n->next)
+ _stmt_print_list_(n->data, 0, &lvls, (n == sl->op4.lval->t));
+}
+
void
rel_print(mvc *sql, sql_rel *rel, int depth)
{
diff --git a/sql/backends/monet5/sql_gencode.h
b/sql/backends/monet5/sql_gencode.h
--- a/sql/backends/monet5/sql_gencode.h
+++ b/sql/backends/monet5/sql_gencode.h
@@ -36,6 +36,7 @@ extern void _rel_print(mvc *sql, sql_rel
extern void _exp_print(mvc *sql, sql_exp *e);
extern void _exps_print(mvc *sql, list *l);
+extern void _stmt_print_list(stmt *sl);
extern int constantAtom(backend *be, MalBlkPtr mb, atom *a);
extern InstrPtr table_func_create_result(MalBlkPtr mb, InstrPtr q, sql_func
*f, list *restypes);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]