const AST *Scanner::lex_cls(bool neg)
{
    std::vector<ASTRange> *cls = new std::vector<ASTRange>;
    uint32_t u, l;
    const loc_t &loc0 = tok_loc();
    loc_t loc = cur_loc();
fst:
    tok = cur;

#line 3807 "src/parse/lex.cc"
{
	unsigned char yych;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych == ']') goto yy421;
#line 749 "../src/parse/lex.re"
	{ l = lex_cls_chr(); goto snd; }
#line 3815 "src/parse/lex.cc"
yy421:
	++cur;
#line 748 "../src/parse/lex.re"
	{ return ast_cls(loc0, cls, neg); }
#line 3820 "src/parse/lex.cc"
}
#line 750 "../src/parse/lex.re"

snd:

#line 3826 "src/parse/lex.cc"
{
	unsigned char yych;
	if ((lim - cur) < 2) { if (!fill(2)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*(mar = cur);
	if (yych == '-') goto yy424;
yy423:
#line 753 "../src/parse/lex.re"
	{ u = l; goto add; }
#line 3835 "src/parse/lex.cc"
yy424:
	yych = (unsigned char)*++cur;
	if (yych != ']') goto yy425;
	cur = mar;
	goto yy423;
yy425:
	++cur;
	cur -= 1;
#line 754 "../src/parse/lex.re"
	{
        u = lex_cls_chr();
        if (l > u) {
            msg.warn.swapped_range(loc, l, u);
            std::swap(l, u);
        }
        goto add;
    }
#line 3853 "src/parse/lex.cc"
}
#line 762 "../src/parse/lex.re"

add:
    cls->push_back(ASTRange(l, u, loc));
    loc = cur_loc();
    goto fst;
}
const AST *Scanner::lex_cls(bool neg)
{
    std::vector<ASTRange> *cls = new std::vector<ASTRange>;
    uint32_t u, l;
    const loc_t &loc0 = tok_loc();
    loc_t loc = cur_loc();
fst:
    tok = cur;

#line 3807 "src/parse/lex.cc"
{
	unsigned char yych;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych == ']') goto yy421;
#line 749 "../src/parse/lex.re"
	{ l = lex_cls_chr(); goto snd; }
#line 3815 "src/parse/lex.cc"
yy421:
	++cur;
#line 748 "../src/parse/lex.re"
	{ return ast_cls(loc0, cls, neg); }
#line 3820 "src/parse/lex.cc"
}
#line 750 "../src/parse/lex.re"

snd:

#line 3826 "src/parse/lex.cc"
{
	unsigned char yych;
	if ((lim - cur) < 2) { if (!fill(2)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*(mar = cur);
	if (yych == '-') goto yy424;
yy423:
#line 753 "../src/parse/lex.re"
	{ u = l; goto add; }
#line 3835 "src/parse/lex.cc"
yy424:
	yych = (unsigned char)*++cur;
	if (yych != ']') goto yy425;
	cur = mar;
	goto yy423;
yy425:
	++cur;
	cur -= 1;
#line 754 "../src/parse/lex.re"
	{
        u = lex_cls_chr();
        if (l > u) {
            msg.warn.swapped_range(loc, l, u);
            std::swap(l, u);
        }
        goto add;
    }
#line 3853 "src/parse/lex.cc"
}
#line 762 "../src/parse/lex.re"

add:
    cls->push_back(ASTRange(l, u, loc));
    loc = cur_loc();
    goto fst;
}