From: Eric Hodel Date: 2011-09-17T04:44:42+09:00 Subject: [ruby-core:39591] Ripper#yydebug and friends don't work --Apple-Mail=_12415D9D-F4D2-4862-9344-B21BBA951454 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Ripper#yydebug, #yydebug=3D, #end_seen? and #encoding all fail to work = with a TypeError due to using a different parser_data_type. The attached patch fixes this by defining static implementations: ripper_end_seen_p ripper_encoding ripper_get_yydebug ripper_set_yydebug I don't know if it's the right patch, though. I tried making = parser_data_type an exported symbol but had no luck. The attached test file adds tests for each of these methods to ensure = they work. PS: redmine is down --Apple-Mail=_12415D9D-F4D2-4862-9344-B21BBA951454 Content-Disposition: attachment; filename=parser.y.ripper_yydebug.patch Content-Type: application/octet-stream; name="parser.y.ripper_yydebug.patch" Content-Transfer-Encoding: quoted-printable Index:=20parse.y=0D=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D=0A---=20parse.y=09= (revision=2033272)=0D=0A+++=20parse.y=09(working=20copy)=0D=0A@@=20= -10382,12=20+10382,6=20@@=20rb_parser_new(void)=0D=0A=20=20=20=20=20= return=20TypedData_Wrap_Struct(0,=20&parser_data_type,=20p);=0D=0A=20}=0D= =0A=20=0D=0A-/*=0D=0A-=20*=20=20call-seq:=0D=0A-=20*=20=20=20=20= ripper#end_seen?=20=20=20->=20Boolean=0D=0A-=20*=0D=0A-=20*=20=20Return=20= true=20if=20parsed=20source=20ended=20by=20+\_\_END\_\_+.=0D=0A-=20*/=0D=0A= =20VALUE=0D=0A=20rb_parser_end_seen_p(VALUE=20vparser)=0D=0A=20{=0D=0A@@=20= -10397,12=20+10391,6=20@@=20rb_parser_end_seen_p(VALUE=20vparser)=0D=0A=20= =20=20=20=20return=20ruby__end__seen=20?=20Qtrue=20:=20Qfalse;=0D=0A=20}=0D= =0A=20=0D=0A-/*=0D=0A-=20*=20=20call-seq:=0D=0A-=20*=20=20=20=20= ripper#encoding=20=20=20->=20encoding=0D=0A-=20*=0D=0A-=20*=20=20Return=20= encoding=20of=20the=20source.=0D=0A-=20*/=0D=0A=20VALUE=0D=0A=20= rb_parser_encoding(VALUE=20vparser)=0D=0A=20{=0D=0A@@=20-10412,12=20= +10400,6=20@@=20rb_parser_encoding(VALUE=20vparser)=0D=0A=20=20=20=20=20= return=20rb_enc_from_encoding(parser->enc);=0D=0A=20}=0D=0A=20=0D=0A-/*=0D= =0A-=20*=20=20call-seq:=0D=0A-=20*=20=20=20=20ripper.yydebug=20=20=20->=20= true=20or=20false=0D=0A-=20*=0D=0A-=20*=20=20Get=20yydebug.=0D=0A-=20*/=0D= =0A=20VALUE=0D=0A=20rb_parser_get_yydebug(VALUE=20self)=0D=0A=20{=0D=0A= @@=20-10427,12=20+10409,6=20@@=20rb_parser_get_yydebug(VALUE=20self)=0D=0A= =20=20=20=20=20return=20yydebug=20?=20Qtrue=20:=20Qfalse;=0D=0A=20}=0D=0A= =20=0D=0A-/*=0D=0A-=20*=20=20call-seq:=0D=0A-=20*=20=20=20=20= ripper.yydebug=20=3D=20flag=0D=0A-=20*=0D=0A-=20*=20=20Set=20yydebug.=0D=0A= -=20*/=0D=0A=20VALUE=0D=0A=20rb_parser_set_yydebug(VALUE=20self,=20VALUE=20= flag)=0D=0A=20{=0D=0A@@=20-10508,6=20+10484,67=20@@=20= rb_parser_free(struct=20parser_params=20*par=0D=0A=20#endif=0D=0A=20=0D=0A= =20#ifdef=20RIPPER=0D=0A+/*=0D=0A+=20*=20=20call-seq:=0D=0A+=20*=20=20=20= =20ripper.yydebug=20=20=20->=20true=20or=20false=0D=0A+=20*=0D=0A+=20*=20= =20Get=20yydebug.=0D=0A+=20*/=0D=0A+static=20VALUE=0D=0A= +ripper_get_yydebug(VALUE=20self)=0D=0A+{=0D=0A+=20=20=20=20struct=20= parser_params=20*parser;=0D=0A+=0D=0A+=20=20=20=20= TypedData_Get_Struct(self,=20struct=20parser_params,=20= &parser_data_type,=20parser);=0D=0A+=20=20=20=20return=20yydebug=20?=20= Qtrue=20:=20Qfalse;=0D=0A+}=0D=0A+=0D=0A+/*=0D=0A+=20*=20=20call-seq:=0D=0A= +=20*=20=20=20=20ripper.yydebug=20=3D=20flag=0D=0A+=20*=0D=0A+=20*=20=20= Set=20yydebug.=0D=0A+=20*/=0D=0A+VALUE=0D=0A+ripper_set_yydebug(VALUE=20= self,=20VALUE=20flag)=0D=0A+{=0D=0A+=20=20=20=20struct=20parser_params=20= *parser;=0D=0A+=0D=0A+=20=20=20=20TypedData_Get_Struct(self,=20struct=20= parser_params,=20&parser_data_type,=20parser);=0D=0A+=20=20=20=20yydebug=20= =3D=20RTEST(flag);=0D=0A+=20=20=20=20return=20flag;=0D=0A+}=0D=0A+=0D=0A= +/*=0D=0A+=20*=20=20call-seq:=0D=0A+=20*=20=20=20=20ripper.end_seen?=20=20= =20->=20Boolean=0D=0A+=20*=0D=0A+=20*=20=20Return=20true=20if=20parsed=20= source=20ended=20by=20+\_\_END\_\_+.=0D=0A+=20*/=0D=0A+VALUE=0D=0A= +ripper_end_seen_p(VALUE=20vparser)=0D=0A+{=0D=0A+=20=20=20=20struct=20= parser_params=20*parser;=0D=0A+=0D=0A+=20=20=20=20= TypedData_Get_Struct(vparser,=20struct=20parser_params,=20= &parser_data_type,=20parser);=0D=0A+=20=20=20=20return=20ruby__end__seen=20= ?=20Qtrue=20:=20Qfalse;=0D=0A+}=0D=0A+=0D=0A+/*=0D=0A+=20*=20=20= call-seq:=0D=0A+=20*=20=20=20=20ripper.encoding=20=20=20->=20encoding=0D=0A= +=20*=0D=0A+=20*=20=20Return=20encoding=20of=20the=20source.=0D=0A+=20*/=0D= =0A+VALUE=0D=0A+ripper_encoding(VALUE=20vparser)=0D=0A+{=0D=0A+=20=20=20=20= struct=20parser_params=20*parser;=0D=0A+=0D=0A+=20=20=20=20= TypedData_Get_Struct(vparser,=20struct=20parser_params,=20= &parser_data_type,=20parser);=0D=0A+=20=20=20=20return=20= rb_enc_from_encoding(parser->enc);=0D=0A+}=0D=0A+=0D=0A=20#ifdef=20= RIPPER_DEBUG=0D=0A=20extern=20int=20rb_is_pointer_to_heap(VALUE);=0D=0A=20= =0D=0A@@=20-10974,10=20+11011,10=20@@=20Init_ripper(void)=0D=0A=20=20=20=20= =20rb_define_method(Ripper,=20"column",=20ripper_column,=200);=0D=0A=20=20= =20=20=20rb_define_method(Ripper,=20"filename",=20ripper_filename,=200);=0D= =0A=20=20=20=20=20rb_define_method(Ripper,=20"lineno",=20ripper_lineno,=20= 0);=0D=0A-=20=20=20=20rb_define_method(Ripper,=20"end_seen?",=20= rb_parser_end_seen_p,=200);=0D=0A-=20=20=20=20rb_define_method(Ripper,=20= "encoding",=20rb_parser_encoding,=200);=0D=0A-=20=20=20=20= rb_define_method(Ripper,=20"yydebug",=20rb_parser_get_yydebug,=200);=0D=0A= -=20=20=20=20rb_define_method(Ripper,=20"yydebug=3D",=20= rb_parser_set_yydebug,=201);=0D=0A+=20=20=20=20rb_define_method(Ripper,=20= "end_seen?",=20ripper_end_seen_p,=200);=0D=0A+=20=20=20=20= rb_define_method(Ripper,=20"encoding",=20ripper_encoding,=200);=0D=0A+=20= =20=20=20rb_define_method(Ripper,=20"yydebug",=20ripper_get_yydebug,=20= 0);=0D=0A+=20=20=20=20rb_define_method(Ripper,=20"yydebug=3D",=20= ripper_set_yydebug,=201);=0D=0A=20#ifdef=20RIPPER_DEBUG=0D=0A=20=20=20=20= =20rb_define_method(rb_mKernel,=20"assert_Qundef",=20= ripper_assert_Qundef,=202);=0D=0A=20=20=20=20=20= rb_define_method(rb_mKernel,=20"rawVALUE",=20ripper_value,=201);=0D=0A= --Apple-Mail=_12415D9D-F4D2-4862-9344-B21BBA951454 Content-Disposition: attachment; filename=test_ripper.rb Content-Type: text/x-ruby-script; name="test_ripper.rb" Content-Transfer-Encoding: quoted-printable begin=0D require 'ripper'=0D require 'test/unit'=0D ripper_test =3D true=0D module TestRipper; end=0D rescue LoadError=0D end=0D =0D class TestRipper::Ripper < Test::Unit::TestCase=0D =0D def setup=0D @ripper =3D Ripper.new '1 + 1'=0D end=0D =0D def test_column=0D assert_nil @ripper.column=0D end=0D =0D def test_encoding=0D assert_equal Encoding::US_ASCII, @ripper.encoding=0D end=0D =0D def test_end_seen_eh=0D refute @ripper.end_seen?=0D end=0D =0D def test_filename=0D assert_equal '(ripper)', @ripper.filename=0D end=0D =0D def test_lineno=0D assert_nil @ripper.lineno=0D end=0D =0D def test_parse=0D refute @ripper.parse=0D end=0D =0D def test_yydebug=0D refute @ripper.yydebug=0D end=0D =0D def test_yydebug_equals=0D @ripper.yydebug =3D true=0D =0D assert @ripper.yydebug=0D end=0D =0D end if ripper_test=0D =0D --Apple-Mail=_12415D9D-F4D2-4862-9344-B21BBA951454--