summaryrefslogtreecommitdiffstats
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
commit560fbe38788fb270f5303d5a123c4365a592c7ce (patch)
tree001d1e98fd86421447657d3fd4b2c461b8ffa4c4 /parse.y
parent59b089e0c259e8f2bb2fa8cb44eab919095db80a (diff)
downloadruby-560fbe38788fb270f5303d5a123c4365a592c7ce.tar.gz
ruby-560fbe38788fb270f5303d5a123c4365a592c7ce.tar.xz
ruby-560fbe38788fb270f5303d5a123c4365a592c7ce.zip
* 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: http://svn.ruby-lang.org/repos/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 079128414..fd1e33a62 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;