diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-09-14 10:53:47 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-09-14 10:53:47 +0000 |
commit | 7df1e45bb6b4326da5c799dcf58d38f0a14362af (patch) | |
tree | c742cebc6f6a1bc37d74c7a24b9d59b68971afdd /parse.y | |
parent | a61ae940c68c4401a42487ee2b670e145dd56dcd (diff) | |
download | ruby-7df1e45bb6b4326da5c799dcf58d38f0a14362af.tar.gz |
ripper: add states of scanner
* parse.y (ripper_state): add states of scanner to tokens from
Ripper.lex and Ripper::Filter#on_*. based on the patch by
aycabta (Code Ahss) at [ruby-core:81789]. [Feature #13686]
* ext/ripper/tools/preproc.rb (prelude, usercode): generate EXPR_*
constants from enums.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59896 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -11446,6 +11446,25 @@ ripper_lineno(VALUE self) return INT2NUM(ruby_sourceline); } +/* + * call-seq: + * ripper.state -> Integer + * + * Return scanner state of current token. + */ +static VALUE +ripper_state(VALUE self) +{ + struct parser_params *parser; + + TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); + if (!ripper_initialized_p(parser)) { + rb_raise(rb_eArgError, "method called for uninitialized object"); + } + if (NIL_P(parser->parsing_thread)) return Qnil; + return INT2NUM(lex_state); +} + #ifdef RIPPER_DEBUG /* :nodoc: */ static VALUE @@ -11493,6 +11512,7 @@ InitVM_ripper(void) rb_define_method(Ripper, "column", ripper_column, 0); rb_define_method(Ripper, "filename", ripper_filename, 0); rb_define_method(Ripper, "lineno", ripper_lineno, 0); + rb_define_method(Ripper, "state", ripper_state, 0); rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0); rb_define_method(Ripper, "encoding", rb_parser_encoding, 0); rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0); @@ -11507,6 +11527,10 @@ 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); +<% @exprs.each do |expr, desc| -%> + /* <%=desc%> */ + rb_define_const(Ripper, "<%=expr%>", INT2NUM(<%=expr%>)); +<% end %> ripper_init_eventids1_table(Ripper); ripper_init_eventids2_table(Ripper); |