aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ext/ripper/ripper_init.c.tmpl6
-rw-r--r--test/ripper/test_ripper.rb7
2 files changed, 10 insertions, 3 deletions
diff --git a/ext/ripper/ripper_init.c.tmpl b/ext/ripper/ripper_init.c.tmpl
index 32b8aa4398..98f260f8b1 100644
--- a/ext/ripper/ripper_init.c.tmpl
+++ b/ext/ripper/ripper_init.c.tmpl
@@ -25,14 +25,14 @@ static void
ripper_parser_mark2(void *ptr)
{
struct ripper *r = (struct ripper*)ptr;
- ripper_parser_mark(r->p);
+ if (r->p) ripper_parser_mark(r->p);
}
static void
ripper_parser_free2(void *ptr)
{
struct ripper *r = (struct ripper*)ptr;
- ripper_parser_free(r->p);
+ if (r->p) ripper_parser_free(r->p);
xfree(r);
}
@@ -40,7 +40,7 @@ static size_t
ripper_parser_memsize2(const void *ptr)
{
struct ripper *r = (struct ripper*)ptr;
- return ripper_parser_memsize(r->p);
+ return (r->p) ? ripper_parser_memsize(r->p) : 0;
}
static const rb_data_type_t parser_data_type = {
diff --git a/test/ripper/test_ripper.rb b/test/ripper/test_ripper.rb
index c6775c5c93..2bb307eddf 100644
--- a/test/ripper/test_ripper.rb
+++ b/test/ripper/test_ripper.rb
@@ -14,6 +14,13 @@ class TestRipper::Ripper < Test::Unit::TestCase
@ripper = Ripper.new '1 + 1'
end
+ def test_new
+ assert_separately(%w[-rripper], "#{<<~"begin;"}\n#{<<~'end;'}")
+ begin;
+ assert_nil EnvUtil.under_gc_stress {Ripper.new("")}.state
+ end;
+ end
+
def test_column
assert_nil @ripper.column
end