# HG changeset patch # User Matti Hamalainen # Date 1206686994 -7200 # Node ID ce3f2d2455cfa2cc7c1a366c845cdfc76b247746 # Parent a5382bae0eea470a8d0c21b4936e998ec9d1072e Moved debugging functions to tuple_compiler.c diff -r a5382bae0eea -r ce3f2d2455cf src/audacious/tuple_compiler.c --- a/src/audacious/tuple_compiler.c Fri Mar 28 04:41:53 2008 +0200 +++ b/src/audacious/tuple_compiler.c Fri Mar 28 08:49:54 2008 +0200 @@ -829,3 +829,110 @@ return res; } + + +static void print_vars(FILE *f, TupleEvalContext *ctx, TupleEvalNode *node, gint start, gint end) +{ + gint i; + g_return_if_fail(node != NULL); + g_return_if_fail(ctx != NULL); + g_return_if_fail(start >= 0); + g_return_if_fail(start <= end); + g_return_if_fail(end < MAX_VAR); + + for (i = start; i <= end; i++) { + TupleEvalVar *v = NULL; + gchar *s = NULL; + gint n = node->var[i]; + + if (n >= 0) { + v = ctx->variables[n]; + if (v) { + s = v->name; + + if (v->type == VAR_CONST) + fprintf(f, "(const)"); + else if (v->type == VAR_DEF) + fprintf(f, "(def)"); + } + } + + fprintf(f, "var[%d]=(%d),\"%s\" ", i, n, s); + } +} + + +gint tuple_formatter_print(FILE *f, gint *level, TupleEvalContext *ctx, TupleEvalNode *expr) +{ + TupleEvalNode *curr = expr; + + if (!expr) return -1; + + (*level)++; + + while (curr) { + gint i; + for (i = 0; i < *level; i++) + fprintf(f, " "); + + switch (curr->opcode) { + case OP_RAW: + fprintf(f, "OP_RAW text=\"%s\"\n", curr->text); + break; + + case OP_FIELD: + fprintf(f, "OP_FIELD "); + print_vars(f, ctx, curr, 0, 0); + fprintf(f, "\n"); + break; + + case OP_EXISTS: + fprintf(f, "OP_EXISTS "); + print_vars(f, ctx, curr, 0, 0); + fprintf(f, "\n"); + tuple_formatter_print(f, level, ctx, curr->children); + break; + + case OP_DEF_STRING: + fprintf(f, "OP_DEF_STRING "); + fprintf(f, "\n"); + break; + + case OP_DEF_INT: + fprintf(f, "OP_DEF_INT "); + fprintf(f, "\n"); + break; + + case OP_EQUALS: + fprintf(f, "OP_EQUALS "); + print_vars(f, ctx, curr, 0, 1); + fprintf(f, "\n"); + tuple_formatter_print(f, level, ctx, curr->children); + break; + + case OP_NOT_EQUALS: + fprintf(f, "OP_NOT_EQUALS "); + print_vars(f, ctx, curr, 0, 1); + fprintf(f, "\n"); + tuple_formatter_print(f, level, ctx, curr->children); + break; + + case OP_IS_EMPTY: + fprintf(f, "OP_IS_EMPTY "); + print_vars(f, ctx, curr, 0, 0); + fprintf(f, "\n"); + tuple_formatter_print(f, level, ctx, curr->children); + break; + + default: + fprintf(f, "Unimplemented opcode %d!\n", curr->opcode); + break; + } + + curr = curr->next; + } + + (*level)--; + + return 0; +} diff -r a5382bae0eea -r ce3f2d2455cf src/audacious/tuple_compiler.h --- a/src/audacious/tuple_compiler.h Fri Mar 28 04:41:53 2008 +0200 +++ b/src/audacious/tuple_compiler.h Fri Mar 28 08:49:54 2008 +0200 @@ -104,6 +104,7 @@ void tuple_evalnode_free(TupleEvalNode *expr); +gint tuple_formatter_print(FILE *f, gint *level, TupleEvalContext *ctx, TupleEvalNode *expr); TupleEvalNode *tuple_formatter_compile(TupleEvalContext *ctx, gchar *expr); gchar *tuple_formatter_eval(TupleEvalContext *ctx, TupleEvalNode *expr, Tuple *tuple); diff -r a5382bae0eea -r ce3f2d2455cf src/audacious/tuple_formatter.c --- a/src/audacious/tuple_formatter.c Fri Mar 28 04:41:53 2008 +0200 +++ b/src/audacious/tuple_formatter.c Fri Mar 28 08:49:54 2008 +0200 @@ -613,114 +613,3 @@ return rv; } - -#ifdef TUPLE_COMPILER_DEBUG -static void print_vars(FILE *f, TupleEvalContext *ctx, TupleEvalNode *node, gint start, gint end) -{ - gint i; - g_return_if_fail(node != NULL); - g_return_if_fail(ctx != NULL); - g_return_if_fail(start >= 0); - g_return_if_fail(start <= end); - g_return_if_fail(end < MAX_VAR); - - for (i = start; i <= end; i++) { - TupleEvalVar *v = NULL; - gchar *s = NULL; - gint n = node->var[i]; - - if (n >= 0) { - v = ctx->variables[n]; - if (v) { - s = v->name; - - if (v->type == VAR_CONST) - fprintf(f, "(const)"); - else if (v->type == VAR_DEF) - fprintf(f, "(def)"); - } - } - - fprintf(f, "var[%d]=(%d),\"%s\" ", i, n, s); - } -} - -gint tuple_formatter_print(FILE *f, gint *level, TupleEvalContext *ctx, TupleEvalNode *expr) -{ - TupleEvalNode *curr = expr; - - if (!expr) return -1; - - (*level)++; - - /* Evaluate tuple in given TupleEval expression in given - * context and return resulting string. - */ - while (curr) { - gint i; - for (i = 0; i < *level; i++) - fprintf(f, " "); - - switch (curr->opcode) { - case OP_RAW: - fprintf(f, "OP_RAW text=\"%s\"\n", curr->text); - break; - - case OP_FIELD: - fprintf(f, "OP_FIELD "); - print_vars(f, ctx, curr, 0, 0); - fprintf(f, "\n"); - break; - - case OP_EXISTS: - fprintf(f, "OP_EXISTS "); - print_vars(f, ctx, curr, 0, 0); - fprintf(f, "\n"); - tuple_formatter_print(f, level, ctx, curr->children); - break; - - case OP_DEF_STRING: - fprintf(f, "OP_DEF_STRING "); - fprintf(f, "\n"); - break; - - case OP_DEF_INT: - fprintf(f, "OP_DEF_INT "); - fprintf(f, "\n"); - break; - - case OP_EQUALS: - fprintf(f, "OP_EQUALS "); - print_vars(f, ctx, curr, 0, 1); - fprintf(f, "\n"); - tuple_formatter_print(f, level, ctx, curr->children); - break; - - case OP_NOT_EQUALS: - fprintf(f, "OP_NOT_EQUALS "); - print_vars(f, ctx, curr, 0, 1); - fprintf(f, "\n"); - tuple_formatter_print(f, level, ctx, curr->children); - break; - - case OP_IS_EMPTY: - fprintf(f, "OP_IS_EMPTY "); - print_vars(f, ctx, curr, 0, 0); - fprintf(f, "\n"); - tuple_formatter_print(f, level, ctx, curr->children); - break; - - default: - fprintf(f, "Unimplemented opcode %d!\n", curr->opcode); - break; - } - - curr = curr->next; - } - - (*level)--; - - return 0; -} - -#endif