From 7b9d5bad396bdd1cfa81cb2a76e5f1d47b145cf6 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Mon, 10 Nov 2014 01:03:01 +0100 Subject: support new "~" conditional: useful for implying default parameters in macros --- src/parser.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'src/parser.cpp') diff --git a/src/parser.cpp b/src/parser.cpp index 1510352..9f5be4c 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -1594,17 +1594,30 @@ StateCondCommand::custom(gchar chr) switch (mode) { case MODE_PARSE_ONLY_COND: - undo.push_var(nest_level); - nest_level++; + undo.push_var(nest_level)++; break; + case MODE_NORMAL: + expressions.eval(); + + if (chr == '~') + /* don't pop value for ~ conditionals */ + break; + + if (!expressions.args()) + throw ArgExpectedError('"'); value = expressions.pop_num_calc(); break; + default: break; } switch (g_ascii_toupper(chr)) { + case '~': + BEGIN_EXEC(&States::start); + result = !expressions.args(); + break; case 'A': BEGIN_EXEC(&States::start); result = g_ascii_isalpha((gchar)value); @@ -1663,11 +1676,9 @@ StateCondCommand::custom(gchar chr) throw Error("Invalid conditional type \"%c\"", chr); } - if (!result) { + if (!result) /* skip to ELSE-part or end of conditional */ - undo.push_var(mode); - mode = MODE_PARSE_ONLY_COND; - } + undo.push_var(mode) = MODE_PARSE_ONLY_COND; return &States::start; } -- cgit v1.2.3