summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWayne Meissner <wmeissner@gmail.com>2012-09-23 10:04:42 +1000
committerWayne Meissner <wmeissner@gmail.com>2012-09-23 10:04:42 +1000
commitd4cc6536f6921e6d3db885490e267be1c710d1a6 (patch)
tree40a92c051b8c4eb21f3373c1229576140067bf1a
parent0847080df9eda3e1f95cc8131a77db83b90bde3a (diff)
downloadffi-d4cc6536f6921e6d3db885490e267be1c710d1a6.tar.gz
Fix issue #206 - raise an error on enums with duplicate keys
-rw-r--r--lib/ffi/enum.rb3
-rw-r--r--spec/ffi/enum_spec.rb4
2 files changed, 6 insertions, 1 deletions
diff --git a/lib/ffi/enum.rb b/lib/ffi/enum.rb
index a68f16b..0438482 100644
--- a/lib/ffi/enum.rb
+++ b/lib/ffi/enum.rb
@@ -86,6 +86,7 @@ module FFI
info.each do |i|
case i
when Symbol
+ raise ArgumentError, "duplicate enum key" if @kv_map.has_key?(i)
@kv_map[i] = value
last_cst = i
value += 1
@@ -95,7 +96,7 @@ module FFI
end
end
end
- @vk_map = Hash[@kv_map.map{|k,v| [v,k]}]
+ @vk_map = @kv_map.invert
end
# @return [Array] enum symbol names
diff --git a/spec/ffi/enum_spec.rb b/spec/ffi/enum_spec.rb
index db6d6d2..8d4c5c9 100644
--- a/spec/ffi/enum_spec.rb
+++ b/spec/ffi/enum_spec.rb
@@ -224,4 +224,8 @@ describe "All enums" do
enum[42424241].should eq nil
enum[42424243].should eq nil
end
+
+ it "duplicate enum keys rejected" do
+ lambda { enum [ :a, 0xfee1dead, :b, 0xdeadbeef, :a, 0 ] }.should raise_error
+ end
end