Create a new Ripper object. src must be a String, an IO, or an Object which has gets method.
This method does not starts parsing. See also #parse and #parse.
static VALUE ripper_initialize(int argc, VALUE *argv, VALUE self) { struct parser_params *parser; VALUE src, fname, lineno; TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); rb_scan_args(argc, argv, "12", &src, &fname, &lineno); if (rb_obj_respond_to(src, ripper_id_gets, 0)) { parser->parser_lex_gets = ripper_lex_get_generic; } else { StringValue(src); parser->parser_lex_gets = lex_get_str; } parser->parser_lex_input = src; parser->eofp = Qfalse; if (NIL_P(fname)) { fname = STR_NEW2("(ripper)"); } else { StringValue(fname); } parser_initialize(parser); parser->parser_ruby_sourcefile_string = fname; parser->parser_ruby_sourcefile = RSTRING_PTR(fname); parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1; return Qnil; }
Return column number of current parsing line. This number starts from 0.
static VALUE ripper_column(VALUE self) { struct parser_params *parser; long col; 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; col = parser->tokp - parser->parser_lex_pbeg; return LONG2NUM(col); }
Return encoding of the source.
VALUE rb_parser_encoding(VALUE vparser) { struct parser_params *parser; TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); return rb_enc_from_encoding(parser->enc); }
Return true if parsed source ended by +__END__+.
VALUE rb_parser_end_seen_p(VALUE vparser) { struct parser_params *parser; TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); return ruby__end__seen ? Qtrue : Qfalse; }
Return current parsing filename.
static VALUE ripper_filename(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"); } return parser->parser_ruby_sourcefile_string; }
Return line number of current parsing line. This number starts from 1.
static VALUE ripper_lineno(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(parser->parser_ruby_sourceline); }
Start parsing and returns the value of the root action.
static VALUE ripper_parse(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)) { if (parser->parsing_thread == rb_thread_current()) rb_raise(rb_eArgError, "Ripper#parse is not reentrant"); else rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe"); } parser->parsing_thread = rb_thread_current(); rb_ensure(ripper_parse0, self, ripper_ensure, self); return parser->result; }
Get yydebug.
VALUE rb_parser_get_yydebug(VALUE self) { struct parser_params *parser; TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); return yydebug ? Qtrue : Qfalse; }
Set yydebug.
VALUE rb_parser_set_yydebug(VALUE self, VALUE flag) { struct parser_params *parser; TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); yydebug = RTEST(flag); return flag; }