From: Ben Pfaff Date: Fri, 7 Nov 2014 06:47:24 +0000 (-0800) Subject: Factor out substitution logic. Regularize. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9f11a65bf50d984fc435f29095a35833a58d17b3;hp=a912c9228d42bef16b98e6ddd34b8bb914dbebd7;p=pspp Factor out substitution logic. Regularize. --- diff --git a/dump.c b/dump.c index 64b6ca74fc..44a1158af4 100644 --- a/dump.c +++ b/dump.c @@ -426,36 +426,47 @@ dump_dims(void) } static void -dump_data_value(void) +dump_substs(void (*dump)(int level), int level) { + dump_value_31(); + + char *base = get_string(); + int x = get_u32(); + printf ("\"%s\" with %d variables:\n", base, x); + for (int i = 0; i < x; i++) + { + int y = get_u32(); + if (!y) + y = 1; + else + match_u32_assert(0); + for (int j = 0; j <= level; j++) + printf (" "); + printf("variable %d has %d values:\n", i, y); + for (int j = 0; j < y; j++) + { + dump (level+1); + putchar('\n'); + } + } +} + +static void +dump_data_value(int level) +{ + for (int i = 0; i <= level; i++) + printf (" "); + match_byte(0); match_byte(0); match_byte(0); match_byte(0); - if (data[pos] == 2 || data[pos] == 4 || data[pos] == 3 || data[pos] == 1) + if (data[pos] == 1 || data[pos] == 2 || data[pos] == 3 || data[pos] == 4) dump_value__(0, false); else if (data[pos] == 5) dump_value (0); else - { - dump_value_31(); - char *base = get_string(); - int x = get_u32(); - printf ("\"%s\"; %d variables:\n", base, x); - for (int i = 0; i < x; i++) - { - int y = get_u32(); - if (!y) - y = 1; - else - match_u32_assert(0); - for (int j = 0; j <= 0; j++) - printf (" "); - printf("variable %d has %d values:\n", i, y); - for (int j = 0; j < y; j++) - dump_data_value(); - } - } + dump_substs (dump_data_value, level + 1); } static void @@ -481,7 +492,7 @@ dump_data(void) { printf("%08x, index %d:\n", pos, get_u32()); match_u32_assert(0); - dump_data_value(); + dump_data_value(0); putchar('\n'); } } @@ -496,34 +507,12 @@ dump_title_value(int level) match_byte (0); match_byte (0); match_byte (0); - if (data[pos] == 3 || data[pos] == 2 || data[pos] == 4 || data[pos] == 1) + if (data[pos] == 1 || data[pos] == 2 || data[pos] == 3 || data[pos] == 4) dump_value(level); else if (data[pos] == 5) dump_value__(level, true); else - { - dump_value_31(); - - char *base = get_string(); - int x = get_u32(); - printf ("\"%s\" with %d variables:\n", base, x); - for (int i = 0; i < x; i++) - { - int y = get_u32(); - if (!y) - y = 1; - else - match_u32_assert(0); - for (int j = 0; j <= level; j++) - printf (" "); - printf("variable %d has %d values:\n", i, y); - for (int j = 0; j < y; j++) - { - dump_title_value (level+1); - putchar('\n'); - } - } - } + dump_substs(dump_title_value, level + 1); } static void @@ -538,31 +527,10 @@ dump_footnote_value(int level) match_byte (0); if (data[pos] == 2 || data[pos] == 4) dump_value(level); - else if (data[pos] == 5 || data[pos] == 3 || data[pos] == 1) + else if (data[pos] == 1 || data[pos] == 3 || data[pos] == 5) dump_value__(level, false); else - { - dump_value_31(); - char *base = get_string(); - int x = get_u32(); - printf ("\"%s\"; %d variables:\n", base, x); - for (int i = 0; i < x; i++) - { - int y = get_u32(); - if (!y) - y = 1; - else - match_u32_assert(0); - for (int j = 0; j <= level; j++) - printf (" "); - printf("variable %d has %d values:\n", i, y); - for (int j = 0; j < y; j++) - { - dump_footnote_value (level+1); - putchar('\n'); - } - } - } + dump_substs(dump_footnote_value, level + 1); } static void