From 8cc154bc48f730db2303a6bfa91532775fc7ea5b Mon Sep 17 00:00:00 2001 From: Chris Pick Date: Thu, 3 Sep 2015 15:12:56 -0400 Subject: [PATCH] Fix non-zero arity functions followed by other functions Temporarily skip any queued function code characters when reading the current function's arguments. Fixes #2357. --- src/input.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/input.cpp b/src/input.cpp index 2b556c2a2..6e10074b1 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -42,6 +42,7 @@ #include "output.h" #include #include +#include #define DEFAULT_TERM L"ansi" #define MAX_INPUT_FUNCTION_ARGS 20 @@ -537,10 +538,23 @@ wchar_t input_function_pop_arg() void input_function_push_args(int code) { int arity = input_function_arity(code); + std::deque skipped; + for (int i = 0; i < arity; i++) { - input_function_push_arg(input_common_readch(0)); + wchar_t arg; + + // skip and queue up any function codes + while(((arg = input_common_readch(0)) >= R_MIN) && (arg <= R_MAX)) + { + skipped.push_front(arg); + } + + input_function_push_arg(arg); } + + // push the function codes back into the input stream + std::for_each(skipped.begin(), skipped.end(), input_common_next_ch); } /**