From 3fb6326fc36c69aa0b66de4823b116d7c0a9486c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Fri, 1 May 2015 20:55:43 +0200 Subject: parse_kconfig rewriten parse_kconfig should now generate full dependency. It is not transforming whole expression to CNF, but only pairs. --- scripts/parse_kconfig/output.c | 116 ++++------------------------------------- 1 file changed, 10 insertions(+), 106 deletions(-) (limited to 'scripts/parse_kconfig/output.c') diff --git a/scripts/parse_kconfig/output.c b/scripts/parse_kconfig/output.c index 3863139..47442ce 100644 --- a/scripts/parse_kconfig/output.c +++ b/scripts/parse_kconfig/output.c @@ -17,118 +17,22 @@ void output_finish(void) { // Functions for symbol_map -void output_push_symbol(int id, char *name) { +void output_push_symbol(unsigned id, char *name) { fprintf(fsymmap, "%d:%s\n", id, name); } // Functions for rules -struct output_expr *output_rules_newexpr(void) { - struct output_expr *rtn; - rtn = malloc(sizeof(struct output_expr)); - rtn->terms_size = 1; - rtn->terms_pos = 0; - rtn->terms = malloc(rtn->terms_size * sizeof(int *)); - rtn->terms_sizes = malloc(rtn->terms_size * sizeof(size_t)); - - rtn->w_term_size = 1; - rtn->w_term_pos = 0; - rtn->w_term = malloc(rtn->w_term_size * sizeof(int)); - - return rtn; -} - -void output_rules_symbol(struct output_expr *ex, int id) { - if (++(ex->w_term_pos) >= ex->w_term_size) { - ex->w_term_size *= 2; - ex->w_term = realloc(ex->w_term, ex->w_term_size * sizeof(int)); - } - ex->w_term[ex->w_term_pos - 1] = id; -} - -void output_rules_endterm(struct output_expr *ex) { - if (ex->w_term_pos <= 0) - return; - if (++(ex->terms_pos) >= ex->terms_size) { - ex->terms_size *= 2; - ex->terms = realloc(ex->terms, ex->terms_size * sizeof(int *)); - ex->terms_sizes = - realloc(ex->terms_sizes, ex->terms_size * sizeof(size_t)); - } - ex->terms_sizes[ex->terms_pos - 1] = ex->w_term_pos; - ex->terms[ex->terms_pos - 1] = malloc(ex->w_term_pos * sizeof(int)); - memcpy(ex->terms[ex->terms_pos - 1], ex->w_term, - ex->w_term_pos * sizeof(int)); - ex->w_term_pos = 0; -} - -struct output_expr *output_rules_joinexpr(struct output_expr *ex1, - struct output_expr *ex2) { - if (ex1 == NULL) - if (ex2 == NULL) - return NULL; - else - return ex2; - if (ex2 == NULL) - return ex1; - - if ((ex1->terms_pos + ex2->terms_pos) >= ex1->terms_size) { - ex1->terms_size += ex2->terms_pos; - ex1->terms = realloc(ex1->terms, ex1->terms_size * sizeof(int *)); - ex1->terms_sizes = - realloc(ex1->terms_sizes, ex1->terms_size * sizeof(size_t)); - } - memcpy(ex1->terms + ex1->terms_pos - 1, ex2->terms, - ex2->terms_pos * sizeof(int *)); - memcpy(ex1->terms_sizes + ex1->terms_size - 1, ex2->terms_sizes, - ex2->terms_pos * sizeof(size_t)); - ex1->terms_pos += ex2->terms_pos; - - ex1->w_term_pos = 0; - free(ex2->terms); - free(ex2->terms_sizes); - free(ex2); - return ex1; -} - -struct output_expr *output_rules_copycnf(struct output_expr *ex) { - struct output_expr *rtn; - rtn = malloc(sizeof(struct output_expr)); - rtn->terms_size = ex->terms_size; - rtn->terms_pos = ex->terms_pos; - rtn->terms_sizes = malloc(rtn->terms_size * sizeof(size_t)); - memcpy(rtn->terms_sizes, ex->terms_sizes, - rtn->terms_size * sizeof(size_t)); - rtn->terms = malloc(rtn->terms_size * sizeof(int *)); - size_t i; - for (i = 0; i < rtn->terms_pos; i++) { - rtn->terms[i] = malloc(ex->terms_sizes[i] * sizeof(int)); - memcpy(rtn->terms[i], ex->terms[i], - ex->terms_sizes[i] * sizeof(int)); - } - - ex->w_term_size = 1; - ex->w_term_pos = 0; - ex->w_term = malloc(ex->w_term_size * sizeof(int)); - return rtn; +void output_rules_symbol(int id) { + fprintf(frules, "%d ", id); } -void output_rules_freexpr(struct output_expr *ex) { - size_t i; - for (i = 0; i < ex->terms_pos; i++) { - free(ex->terms[i]); - } - free(ex->terms); - free(ex->terms_sizes); - free(ex->w_term); - free(ex); +void output_rules_endterm(void) { + fprintf(frules, "\n"); } -void output_rules_writexpr(struct output_expr *ex) { - size_t i, y; - for (i = 0; i < ex->terms_pos; i++) { - for (y = 0; y < ex->terms_sizes[i]; y++) { - fprintf(frules, "%d ", ex->terms[i][y]); - } - fprintf(frules, "\n"); - } +void output_write_variable_count(char *var_file, int count) { + FILE *f; + f = fopen(var_file, "w"); + fprintf(f, "%d", count); + fclose(f); } -- cgit v1.2.3