From f124126b327585a43bff6d21249e43f3fd7b79a0 Mon Sep 17 00:00:00 2001 From: q66 Date: Wed, 12 Oct 2016 02:05:55 +0200 Subject: [PATCH] use str parse util for blockstrs --- src/cs_gen.cc | 42 ++++-------------------------------------- 1 file changed, 4 insertions(+), 38 deletions(-) diff --git a/src/cs_gen.cc b/src/cs_gen.cc index e668369..f528ed7 100644 --- a/src/cs_gen.cc +++ b/src/cs_gen.cc @@ -8,35 +8,6 @@ namespace cscript { -static ostd::ConstCharRange cs_parse_str(ostd::ConstCharRange str) { - while (!str.empty()) { - switch (*str) { - case '\r': - case '\n': - case '\"': - return str; - case '^': - ++str; - if (!str.empty()) { - break; - } - return str; - case '\\': - ++str; - if (!str.empty() && ((*str == '\r') || (*str == '\n'))) { - char c = *str; - ++str; - if (!str.empty() && (c == '\r') && (*str == '\n')) { - ++str; - } - } - continue; - } - ++str; - } - return str; -} - ostd::ConstCharRange GenState::get_str() { ostd::Size nl; ostd::ConstCharRange beg = source; @@ -526,15 +497,10 @@ static bool compileblockstr(GenState &gs, ostd::ConstCharRange str, bool macro) break; case '\"': { ostd::ConstCharRange start = str; - ++start; - ostd::ConstCharRange end = cs_parse_str(start); - if (!end.empty() && (*end == '\"')) { - ++end; - } - ostd::Size slen = str.distance_front(end); - memcpy(&buf[len], str.data(), slen); - len += slen; - str = end; + str = util::parse_string(gs.cs, str); + ostd::ConstCharRange strr = ostd::slice_until(start, str); + memcpy(&buf[len], strr.data(), strr.size()); + len += strr.size(); break; } case '/':