зеркало из https://github.com/github/ruby.git
parse.y: ripper_lex_state_name
* parse.y (ripper_lex_state_name): represent lex_state as OR-ed form. * ext/ripper/lib/ripper/lexer.rb (Ripper::Lexer::Elem#to_a): lex_state for inspection. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59949 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
5166f94879
Коммит
d1e63172c6
|
@ -47,6 +47,33 @@ class Ripper
|
|||
|
||||
class Lexer < ::Ripper #:nodoc: internal use only
|
||||
Elem = Struct.new(:pos, :event, :tok, :state)
|
||||
class Elem
|
||||
class List < ::Array
|
||||
def inspect
|
||||
[pos, event, tok, Ripper.lex_state_name(state)].inspect
|
||||
end
|
||||
|
||||
def pretty_print(q) # :nodoc:
|
||||
q.group(1, '[', ']') {
|
||||
q.pp pos
|
||||
q.comma_breakable
|
||||
q.pp event
|
||||
q.comma_breakable
|
||||
q.pp tok
|
||||
q.comma_breakable
|
||||
q.text(Ripper.lex_state_name(state))
|
||||
}
|
||||
end
|
||||
|
||||
def pretty_print_cycle(q) # :nodoc:
|
||||
q.text('[...]')
|
||||
end
|
||||
end
|
||||
|
||||
def to_a
|
||||
List[*values]
|
||||
end
|
||||
end
|
||||
|
||||
def tokenize
|
||||
parse().sort_by(&:pos).map(&:tok)
|
||||
|
|
14
parse.y
14
parse.y
|
@ -568,6 +568,7 @@ RUBY_SYMBOL_EXPORT_BEGIN
|
|||
VALUE rb_parser_reg_compile(struct parser_params* parser, VALUE str, int options);
|
||||
int rb_reg_fragment_setenc(struct parser_params*, VALUE, int);
|
||||
enum lex_state_e rb_parser_trace_lex_state(struct parser_params *, enum lex_state_e, enum lex_state_e, int);
|
||||
VALUE rb_parser_lex_state_name(enum lex_state_e state);
|
||||
void rb_parser_show_bitstack(struct parser_params *, stack_type, const char *, int);
|
||||
PRINTF_ARGS(void rb_parser_fatal(struct parser_params *parser, const char *fmt, ...), 2, 3);
|
||||
RUBY_SYMBOL_EXPORT_END
|
||||
|
@ -9191,6 +9192,12 @@ rb_parser_trace_lex_state(struct parser_params *parser, enum lex_state_e from,
|
|||
return to;
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_parser_lex_state_name(enum lex_state_e state)
|
||||
{
|
||||
return append_lex_state_name(state, rb_str_new(0, 0));
|
||||
}
|
||||
|
||||
static void
|
||||
append_bitstack_value(stack_type stack, VALUE mesg)
|
||||
{
|
||||
|
@ -11484,6 +11491,11 @@ ripper_value(VALUE self, VALUE obj)
|
|||
}
|
||||
#endif
|
||||
|
||||
static VALUE
|
||||
ripper_lex_state_name(VALUE self, VALUE state)
|
||||
{
|
||||
return rb_parser_lex_state_name(NUM2INT(state));
|
||||
}
|
||||
|
||||
void
|
||||
Init_ripper(void)
|
||||
|
@ -11526,6 +11538,8 @@ InitVM_ripper(void)
|
|||
rb_define_singleton_method(Ripper, "dedent_string", parser_dedent_string, 2);
|
||||
rb_define_private_method(Ripper, "dedent_string", parser_dedent_string, 2);
|
||||
|
||||
rb_define_singleton_method(Ripper, "lex_state_name", ripper_lex_state_name, 1);
|
||||
|
||||
<% @exprs.each do |expr, desc| -%>
|
||||
/* <%=desc%> */
|
||||
rb_define_const(Ripper, "<%=expr%>", INT2NUM(<%=expr%>));
|
||||
|
|
Загрузка…
Ссылка в новой задаче