use the new util in parser

master
Daniel Kolesa 2016-10-11 21:23:04 +02:00
parent 0a88a10d99
commit 5fe766aaeb
1 changed files with 6 additions and 35 deletions

View File

@ -38,41 +38,12 @@ static ostd::ConstCharRange cs_parse_str(ostd::ConstCharRange str) {
}
ostd::ConstCharRange GenState::get_str() {
auto ln = source;
next_char();
auto beg = source;
for (; current(); next_char()) {
switch (current()) {
case '\r':
case '\n':
case '\"':
goto done;
case '^':
next_char();
if (current()) {
break;
}
goto done;
case '\\': {
next_char();
char c = current();
if ((c == '\r') || (c == '\n')) {
if ((c == '\r') && (current(1) == '\n')) {
next_char();
}
next_char();
}
continue;
}
}
}
done:
auto ret = ostd::slice_until(beg, source);
if (current() != '\"') {
throw CsErrorException(cs, "unfinished string '%s'", ln);
}
next_char();
return ret;
ostd::Size nl;
ostd::ConstCharRange beg = source;
source = util::parse_string(cs, source, nl);
current_line += int(nl) - 1;
ostd::ConstCharRange ret = ostd::slice_until(beg, source);
return ret.slice(1, ret.size() - 1);
}
CsString GenState::get_str_dup(bool unescape) {