summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-07-08 13:57:06 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-07-08 13:57:06 +0000
commitcaf3933babe1be5bba95b271b567caec92855cdb (patch)
tree001d1e98fd86421447657d3fd4b2c461b8ffa4c4 /parse.y
parent7e16f9e7777781a4969537b5d9f659b1356b2786 (diff)
* thread.c (rb_enable_coverages): hide coverage array by setting 0 to
klass during measurement. * parse.y (coverage, yycompile0): ditto. * iseq.c (prepare_iseq_build): use rb_hash_lookup instead of rb_hash_aref. * thread.c (rb_coverage_result): restore klass of coverage array and return it. * theaad.c (update_coverage): chcek whether its klass is 0. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17959 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y6
1 files changed, 2 insertions, 4 deletions
diff --git a/parse.y b/parse.y
index 0791284141..fd1e33a62c 100644
--- a/parse.y
+++ b/parse.y
@@ -4674,10 +4674,11 @@ coverage(const char *f, int n)
{
extern VALUE rb_vm_get_coverages(void);
VALUE coverages = rb_vm_get_coverages();
- if (RTEST(coverages)) {
+ if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
VALUE fname = rb_str_new2(f);
VALUE lines = rb_ary_new2(n);
int i;
+ RBASIC(lines)->klass = 0;
for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
RARRAY(lines)->len = n;
rb_hash_aset(coverages, fname, lines);
@@ -4718,9 +4719,6 @@ yycompile0(VALUE arg, int tracing)
parser_prepare(parser);
n = yyparse((void*)parser);
- if (ruby_coverage) {
- rb_ary_freeze(ruby_coverage);
- }
ruby_debug_lines = 0;
ruby_coverage = 0;
compile_for_eval = 0;