summaryrefslogtreecommitdiff
path: root/compile.c
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-28 13:15:34 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-28 13:15:34 +0000
commitf2aabd1802b00ce7d23ab7733874b9a48f7495f0 (patch)
tree8a3d0e5c973bfd413c04bb66c20d5f1322395da4 /compile.c
parent0e395a600215e9060cd9915940caa789b92a275a (diff)
* compile.c (iseq_set_sequence): check duplicated when clauses.
[ruby-dev:36616] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19612 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'compile.c')
-rw-r--r--compile.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/compile.c b/compile.c
index 4a1fc9c73c..ae93c8e135 100644
--- a/compile.c
+++ b/compile.c
@@ -1349,7 +1349,12 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
rb_compile_error(RSTRING_PTR(iseq->filename), iobj->line_no,
"unknown label");
}
- rb_hash_aset(map, obj, INT2FIX(lobj->position - (pos+len)));
+ if (!st_lookup(rb_hash_tbl(map), obj, 0)) {
+ rb_hash_aset(map, obj, INT2FIX(lobj->position - (pos+len)));
+ }
+ else {
+ rb_warning("duplicated when clause is ignored");
+ }
}
generated_iseq[pos + 1 + j] = map;
iseq_add_mark_object(iseq, map);