From 918ca216a33364ce35f7e57b65929ab0fda4b1be Mon Sep 17 00:00:00 2001 From: q66 Date: Wed, 21 Sep 2016 20:43:53 +0200 Subject: [PATCH] recursive parseword --- src/cs_gen.cc | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/cs_gen.cc b/src/cs_gen.cc index f162c2f..1977e06 100644 --- a/src/cs_gen.cc +++ b/src/cs_gen.cc @@ -122,9 +122,6 @@ static inline void skipcomments(char const *&p) { } static char const *parseword(char const *p) { - constexpr int maxbrak = 100; - static char brakstack[maxbrak]; - int brakdepth = 0; for (;;) { p += strcspn(p, "\"/;()[] \t\r\n\0"); switch (p[0]) { @@ -142,22 +139,20 @@ static char const *parseword(char const *p) { } break; case '[': - case '(': - if (brakdepth >= maxbrak) { + p = parseword(p + 1); + if (*p != ']') { + return p; + } + break; + case '(': + p = parseword(p + 1); + if (*p != ')') { return p; } - brakstack[brakdepth++] = p[0]; break; case ']': - if (brakdepth <= 0 || brakstack[--brakdepth] != '[') { - return p; - } - break; case ')': - if (brakdepth <= 0 || brakstack[--brakdepth] != '(') { - return p; - } - break; + return p; } ++p; }