Lines Matching refs:parser
102 struct parser { struct
113 struct parser parser; member
124 static NODISCARD demangle_status try_parse_path(struct parser *parser) { in try_parse_path() argument
127 *parser, in try_parse_path()
135 *parser = printer.parser; in try_parse_path()
172 struct parser parser = { inner, inner_len, 0, 0 }; in rust_demangle_v0_demangle() local
174 demangle_status status = try_parse_path(&parser); in rust_demangle_v0_demangle()
176 char next = parser.sym[parser.next]; in rust_demangle_v0_demangle()
179 if (parser.next < parser.sym_len && next >= 'A' && next <= 'Z') { in rust_demangle_v0_demangle()
180 status = try_parse_path(&parser); in rust_demangle_v0_demangle()
187 *rest = parser.sym + parser.next; in rust_demangle_v0_demangle()
662 static NODISCARD demangle_status parser_push_depth(struct parser *parser) { in parser_push_depth() argument
663 parser->depth++; in parser_push_depth()
664 if (parser->depth > MAX_DEPTH) { in parser_push_depth()
671 static demangle_status parser_pop_depth(struct parser *parser) { in parser_pop_depth() argument
672 parser->depth--; in parser_pop_depth()
676 static uint8_t parser_peek(struct parser const *parser) { in parser_peek() argument
677 if (parser->next == parser->sym_len) { in parser_peek()
680 return parser->sym[parser->next]; in parser_peek()
684 static bool parser_eat(struct parser *parser, uint8_t ch) { in parser_eat() argument
685 if (parser_peek(parser) == ch) { in parser_eat()
687 parser->next++; in parser_eat()
695 static uint8_t parser_next(struct parser *parser) { in parser_next() argument
697 if (parser->next == parser->sym_len) { in parser_next()
700 return parser->sym[parser->next++]; in parser_next()
704 static NODISCARD demangle_status parser_ch(struct parser *parser, uint8_t *next) { in parser_ch() argument
706 if (parser->next == parser->sym_len) { in parser_ch()
709 *next = parser->sym[parser->next++]; in parser_ch()
719 static NODISCARD demangle_status parser_hex_nibbles(struct parser *parser, struct buf *buf) { in parser_hex_nibbles() argument
720 size_t start = parser->next; in parser_hex_nibbles()
722 uint8_t ch = parser_next(parser); in parser_hex_nibbles()
730 buf->start = parser->sym + start; in parser_hex_nibbles()
731 buf->len = parser->next - start - 1; // skip final _ in parser_hex_nibbles()
735 static NODISCARD demangle_status parser_digit_10(struct parser *parser, uint8_t *out) { in parser_digit_10() argument
736 uint8_t ch = parser_peek(parser); in parser_digit_10()
739 parser->next++; in parser_digit_10()
746 static NODISCARD demangle_status parser_digit_62(struct parser *parser, uint64_t *out) { in parser_digit_62() argument
747 uint8_t ch = parser_peek(parser); in parser_digit_62()
750 parser->next++; in parser_digit_62()
754 parser->next++; in parser_digit_62()
758 parser->next++; in parser_digit_62()
765 static NODISCARD demangle_status parser_integer_62(struct parser *parser, uint64_t *out) { in parser_integer_62() argument
766 if (parser_eat(parser, '_')) { in parser_integer_62()
773 while (!parser_eat(parser, '_')) { in parser_integer_62()
775 if ((status = parser_digit_62(parser, &d)) != DemangleOk) { in parser_integer_62()
794 static NODISCARD demangle_status parser_opt_integer_62(struct parser *parser, uint8_t tag, uint64_t… in parser_opt_integer_62() argument
795 if (!parser_eat(parser, tag)) { in parser_opt_integer_62()
801 if ((status = parser_integer_62(parser, out)) != DemangleOk) { in parser_opt_integer_62()
811 static NODISCARD demangle_status parser_disambiguator(struct parser *parser, uint64_t *out) { in parser_disambiguator() argument
812 return parser_opt_integer_62(parser, 's', out); in parser_disambiguator()
817 static NODISCARD demangle_status parser_namespace(struct parser *parser, parser_namespace_type *out… in parser_namespace() argument
818 uint8_t next = parser_next(parser); in parser_namespace()
830 static NODISCARD demangle_status parser_backref(struct parser *parser, struct parser *out) { in parser_backref() argument
831 size_t start = parser->next; in parser_backref()
837 demangle_status status = parser_integer_62(parser, &i); in parser_backref()
844 struct parser res = { in parser_backref()
845 .sym = parser->sym, in parser_backref()
846 .sym_len = parser->sym_len, in parser_backref()
848 .depth = parser->depth in parser_backref()
858 static NODISCARD demangle_status parser_ident(struct parser *parser, struct ident *out) { in parser_ident() argument
859 bool is_punycode = parser_eat(parser, 'u'); in parser_ident()
862 demangle_status status = parser_digit_10(parser, &d); in parser_ident()
869 status = parser_digit_10(parser, &d); in parser_ident()
885 parser_eat(parser, '_'); in parser_ident()
887 size_t start = parser->next; in parser_ident()
888 if (parser->sym_len - parser->next < len) { in parser_ident()
891 parser->next += len; in parser_ident()
893 const char *ident = &parser->sym[start]; in parser_ident()
970 demangle_status _parse_status = method(&(printer)->parser, ## __VA_ARGS__); \
1000 return parser_eat(&printer->parser, b); in printer_eat()
1005 parser_pop_depth(&printer->parser); in printer_pop_depth()
1056 struct parser backref; in printer_print_backref()
1063 struct parser orig_parser = printer->parser; in printer_print_backref()
1065 printer->parser = backref; in printer_print_backref()
1068 printer->parser = orig_parser; in printer_print_backref()
1675 if (printer->status == DemangleOk && /* safety */ printer->parser.next > 0) { in printer_print_type()
1676 printer->parser.next--; in printer_print_type()