From 6e152a3be1e5325bd2bd9b1484f30fe3feb1530b Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Wed, 6 Oct 2010 20:26:38 +0000 Subject: [PATCH] #elif handling should now really be correct. git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@2362 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- scripts/specialize-patch | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/scripts/specialize-patch b/scripts/specialize-patch index c9933cb17..59331bd1c 100755 --- a/scripts/specialize-patch +++ b/scripts/specialize-patch @@ -260,15 +260,29 @@ function handle_if() { if_stmnt[if_nesting_level] = evaluated any_section_output[if_nesting_level] = 0 + decision[if_nesting_level] = evaluated + inv_decision[if_nesting_level] = evaluate(sprintf("+#if ! %s", substr(evaluated, 6))) + if (debug) + printf "/* debug specialize-patch: (f) %s / %s */\n", \ + decision[if_nesting_level], inv_decision[if_nesting_level] } else { sub("^+#elif ", - sprintf("+#if ! %s \\&\\& ", substr(decision[if_nesting_level], 5)), + sprintf("+#if %s \\&\\& ", substr(inv_decision[if_nesting_level], 6)), evaluated) + if (debug) + printf "/* debug specialize-patch: (e) %s */\n", evaluated evaluated = evaluate(evaluated) + decision[if_nesting_level] = evaluated + inv_decision[if_nesting_level] \ + = evaluate(sprintf("+#if %s && ! %s", \ + substr(inv_decision[if_nesting_level], 6), \ + substr(evaluated, 6))) + if (debug) + printf "/* debug specialize-patch: (f) %s / %s */\n", \ + decision[if_nesting_level], inv_decision[if_nesting_level] } - decision[if_nesting_level] = evaluated matching_if = if_stmnt[if_nesting_level] } @@ -292,7 +306,7 @@ function process_preprocessor_statement() { else if (evaluated ~ "^+#else") { matching_if = if_stmnt[if_nesting_level] - decision[if_nesting_level] = invert(decision[if_nesting_level]) + decision[if_nesting_level] = inv_decision[if_nesting_level] } else if (evaluated ~ "^+#endif") {