Fix broken parsing
This commit is contained in:
parent
a71b8d1284
commit
26b21f0214
1 changed files with 32 additions and 22 deletions
|
|
@ -510,20 +510,20 @@ std::pair<list*, uint32_t> parse_list_until(const char* in, uint32_t size, uint3
|
||||||
{
|
{
|
||||||
auto pp=parse_condlist(in, size, i);
|
auto pp=parse_condlist(in, size, i);
|
||||||
ret->cls.push_back(pp.first);
|
ret->cls.push_back(pp.first);
|
||||||
if(pp.second < size)
|
i=pp.second;
|
||||||
|
|
||||||
|
if(i < size)
|
||||||
{
|
{
|
||||||
if(in[pp.second] == end_c) // end char, stop here
|
if(in[i] == end_c) // end char, stop here
|
||||||
break;
|
break;
|
||||||
else if(is_in(in[pp.second], COMMAND_SEPARATOR)) // command separator: next char
|
else if(in[i] == '#')
|
||||||
i = skip_unread(in, size, pp.second+1);
|
; // skip here
|
||||||
else if(is_in(in[pp.second], CONTROL_END))
|
else if(is_in(in[i], COMMAND_SEPARATOR))
|
||||||
throw PARSE_ERROR(strf("Unexpected token: '%c'", in[pp.second]), pp.second);
|
i++; // skip on next char
|
||||||
else
|
else if(is_in(in[i], CONTROL_END))
|
||||||
i = skip_unread(in, size, pp.second);
|
throw PARSE_ERROR(strf("Unexpected token: '%c'", in[i]), i);
|
||||||
}
|
|
||||||
else
|
i = skip_unread(in, size, i);
|
||||||
{
|
|
||||||
i=pp.second;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(i>=size)
|
if(i>=size)
|
||||||
|
|
@ -568,12 +568,19 @@ std::pair<list*, uint32_t> parse_list_until(const char* in, uint32_t size, uint3
|
||||||
// do a parse
|
// do a parse
|
||||||
auto pp=parse_condlist(in, size, i);
|
auto pp=parse_condlist(in, size, i);
|
||||||
ret->cls.push_back(pp.first);
|
ret->cls.push_back(pp.first);
|
||||||
if(is_in(in[pp.second], COMMAND_SEPARATOR))
|
i=pp.second;
|
||||||
i = skip_unread(in, size, pp.second+1);
|
if(i<size)
|
||||||
else if(is_in(in[pp.second], CONTROL_END))
|
{
|
||||||
throw PARSE_ERROR(strf("Unexpected token: '%c'", in[pp.second]), pp.second);
|
if(in[i] == '#')
|
||||||
else
|
; // skip here
|
||||||
i = skip_unread(in, size, pp.second);
|
else if(is_in(in[i], COMMAND_SEPARATOR))
|
||||||
|
i++;
|
||||||
|
else if(is_in(in[i], CONTROL_END))
|
||||||
|
throw PARSE_ERROR(strf("Unexpected token: '%c'", in[i]), i);
|
||||||
|
|
||||||
|
i = skip_unread(in, size, i);
|
||||||
|
}
|
||||||
|
|
||||||
// word wasn't found
|
// word wasn't found
|
||||||
if(i>=size)
|
if(i>=size)
|
||||||
{
|
{
|
||||||
|
|
@ -627,10 +634,13 @@ std::tuple<list*, uint32_t, std::string> parse_list_until(const char* in, uint32
|
||||||
// do a parse
|
// do a parse
|
||||||
auto pp=parse_condlist(in, size, i);
|
auto pp=parse_condlist(in, size, i);
|
||||||
ret->cls.push_back(pp.first);
|
ret->cls.push_back(pp.first);
|
||||||
if(is_in(in[pp.second], COMMAND_SEPARATOR))
|
i=pp.second;
|
||||||
i = skip_unread(in, size, pp.second+1);
|
if(in[i] == '#')
|
||||||
else
|
; // skip here
|
||||||
i = skip_unread(in, size, pp.second);
|
else if(is_in(in[i], COMMAND_SEPARATOR))
|
||||||
|
i++; // skip on next
|
||||||
|
|
||||||
|
i = skip_unread(in, size, i);
|
||||||
// word wasn't found
|
// word wasn't found
|
||||||
if(i>=size)
|
if(i>=size)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue