Class: Ripper
Constant Summary collapse
- Version =
version of Ripper
rb_usascii_str_new2(RIPPER_VERSION)
Class Method Summary collapse
Instance Method Summary collapse
-
#column ⇒ Integer
Return column number of current parsing line.
- #dedent_string(input, width) ⇒ Object private
-
#encoding ⇒ Encoding
Return encoding of the source.
-
#end_seen? ⇒ Boolean
Return true if parsed source ended by _END_.
-
#error? ⇒ Boolean
Return true if parsed source has errors.
-
#filename ⇒ String
Return current parsing filename.
-
#new(src, filename = "(ripper)", lineno = 1) ⇒ Object
constructor
Create a new Ripper object.
-
#lineno ⇒ Integer
Return line number of current parsing line.
-
#parse ⇒ Object
Start parsing and returns the value of the root action.
-
#yydebug ⇒ Boolean
Get yydebug.
-
#yydebug=(flag) ⇒ Object
Set yydebug.
Constructor Details
#new(src, filename = "(ripper)", lineno = 1) ⇒ Object
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.
17897 17898 17899 17900 17901 17902 17903 17904 17905 17906 17907 17908 17909 17910 17911 17912 17913 17914 17915 17916 17917 17918 17919 17920 17921 17922 17923 17924 17925 17926 17927 17928 17929 |
# File 'parse.c', line 17897
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_TYPE_P(src, T_FILE)) {
lex_gets = ripper_lex_get_generic;
}
else {
StringValue(src);
lex_gets = lex_get_str;
}
lex_input = src;
parser->eofp = 0;
if (NIL_P(fname)) {
fname = STR_NEW2("(ripper)");
OBJ_FREEZE(fname);
}
else {
StringValue(fname);
fname = rb_str_new_frozen(fname);
}
parser_initialize(parser);
ruby_sourcefile_string = fname;
ruby_sourcefile = RSTRING_PTR(fname);
ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
return Qnil;
}
|
Class Method Details
.dedent_string(input, width) ⇒ Object
13255 13256 13257 13258 13259 13260 13261 13262 13263 13264 13265 13266 13267 13268 13269 13270 |
# File 'parse.c', line 13255
static VALUE
parser_dedent_string(VALUE self, VALUE input, VALUE width)
{
char *str;
long len;
int wid, col;
StringValue(input);
wid = NUM2UINT(width);
rb_str_modify(input);
RSTRING_GETMEM(input, str, len);
col = dedent_pos(str, len, wid);
MEMMOVE(str, str + col, char, len - col);
rb_str_set_len(input, len - col);
return INT2NUM(col);
}
|
Instance Method Details
#column ⇒ Integer
Return column number of current parsing line. This number starts from 0.
17992 17993 17994 17995 17996 17997 17998 17999 18000 18001 18002 18003 18004 18005 |
# File 'parse.c', line 17992
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 - lex_pbeg;
return LONG2NUM(col);
}
|
#dedent_string(input, width) ⇒ Object (private)
13255 13256 13257 13258 13259 13260 13261 13262 13263 13264 13265 13266 13267 13268 13269 13270 |
# File 'parse.c', line 13255
static VALUE
parser_dedent_string(VALUE self, VALUE input, VALUE width)
{
char *str;
long len;
int wid, col;
StringValue(input);
wid = NUM2UINT(width);
rb_str_modify(input);
RSTRING_GETMEM(input, str, len);
col = dedent_pos(str, len, wid);
MEMMOVE(str, str + col, char, len - col);
rb_str_set_len(input, len - col);
return INT2NUM(col);
}
|
#encoding ⇒ Encoding
Return encoding of the source.
17515 17516 17517 17518 17519 17520 17521 17522 |
# File 'parse.c', line 17515
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(current_enc);
}
|
#end_seen? ⇒ Boolean
Return true if parsed source ended by _END_.
17500 17501 17502 17503 17504 17505 17506 17507 |
# File 'parse.c', line 17500
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;
}
|
#error? ⇒ Boolean
Return true if parsed source has errors.
17484 17485 17486 17487 17488 17489 17490 17491 |
# File 'parse.c', line 17484
static VALUE
ripper_error_p(VALUE vparser)
{
struct parser_params *parser;
TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
return parser->error_p ? Qtrue : Qfalse;
}
|
#filename ⇒ String
Return current parsing filename.
18013 18014 18015 18016 18017 18018 18019 18020 18021 18022 18023 |
# File 'parse.c', line 18013
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 ruby_sourcefile_string;
}
|
#lineno ⇒ Integer
Return line number of current parsing line. This number starts from 1.
18032 18033 18034 18035 18036 18037 18038 18039 18040 18041 18042 18043 |
# File 'parse.c', line 18032
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(ruby_sourceline);
}
|
#parse ⇒ Object
Start parsing and returns the value of the root action.
17964 17965 17966 17967 17968 17969 17970 17971 17972 17973 17974 17975 17976 17977 17978 17979 17980 17981 17982 17983 |
# File 'parse.c', line 17964
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;
}
|
#yydebug ⇒ Boolean
Get yydebug.
17530 17531 17532 17533 17534 17535 17536 17537 |
# File 'parse.c', line 17530
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;
}
|
#yydebug=(flag) ⇒ Object
Set yydebug.
17545 17546 17547 17548 17549 17550 17551 17552 17553 |
# File 'parse.c', line 17545
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;
}
|