/* * call-seq: * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper * * 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 Ripper#parse and Ripper.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; }