diff options
author | Wayne Meissner <wmeissner@gmail.com> | 2012-09-23 10:04:42 +1000 |
---|---|---|
committer | Wayne Meissner <wmeissner@gmail.com> | 2012-09-23 10:04:42 +1000 |
commit | d4cc6536f6921e6d3db885490e267be1c710d1a6 (patch) | |
tree | 40a92c051b8c4eb21f3373c1229576140067bf1a | |
parent | 0847080df9eda3e1f95cc8131a77db83b90bde3a (diff) | |
download | ffi-d4cc6536f6921e6d3db885490e267be1c710d1a6.tar.gz |
Fix issue #206 - raise an error on enums with duplicate keys
-rw-r--r-- | lib/ffi/enum.rb | 3 | ||||
-rw-r--r-- | spec/ffi/enum_spec.rb | 4 |
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 |