use str parse util for blockstrs

master
Daniel Kolesa 2016-10-12 02:05:55 +02:00
parent 5fe766aaeb
commit f124126b32
1 changed files with 4 additions and 38 deletions

View File

@ -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 '/':