From 1ba6e8868c9e353be4dfeb3fc407aa2334b35f62 Mon Sep 17 00:00:00 2001 From: hsbt Date: Sat, 3 Jan 2015 09:23:43 +0000 Subject: [PATCH] * ext/fiddle/lib/fiddle/cparser.rb: r49110 brake Fiddle::Import with type_alias * test/fiddle/test_cparser.rb: added type_alias test for parse_ctype and parse_struct_signature. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49119 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ ext/fiddle/lib/fiddle/cparser.rb | 1 + test/fiddle/test_cparser.rb | 16 ++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/ChangeLog b/ChangeLog index d1a46249d2..f7aaadeb16 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sat Jan 3 18:19:50 2015 SHIBATA Hiroshi + + * ext/fiddle/lib/fiddle/cparser.rb: r49110 brake Fiddle::Import with + type_alias + * test/fiddle/test_cparser.rb: added type_alias test for parse_ctype + and parse_struct_signature. + Sat Jan 3 16:02:20 2015 Ayumu AIZAWA * lib/net/http.rb (Net::HTTP.proxy_user): retrieve proxy user from http_proxy. diff --git a/ext/fiddle/lib/fiddle/cparser.rb b/ext/fiddle/lib/fiddle/cparser.rb index 531ffd9593..39812e1715 100644 --- a/ext/fiddle/lib/fiddle/cparser.rb +++ b/ext/fiddle/lib/fiddle/cparser.rb @@ -169,6 +169,7 @@ module Fiddle when /\*/, /\[[\s\d]*\]/ return TYPE_VOIDP else + ty = ty.split(' ')[0] if( tymap[ty] ) return parse_ctype(tymap[ty], tymap) else diff --git a/test/fiddle/test_cparser.rb b/test/fiddle/test_cparser.rb index fb62a15bf9..4d4799d8d6 100644 --- a/test/fiddle/test_cparser.rb +++ b/test/fiddle/test_cparser.rb @@ -59,6 +59,14 @@ module Fiddle assert_equal(TYPE_UINTPTR_T, parse_ctype("uintptr_t")) end + def test_undefined_ctype + assert_raises(DLError) { parse_ctype('DWORD') } + end + + def test_undefined_ctype_with_type_alias + assert_equal(-TYPE_LONG, parse_ctype('DWORD', {"DWORD" => "unsigned long"})) + end + def test_struct_basic assert_equal [[TYPE_INT, TYPE_CHAR], ['i', 'c']], parse_struct_signature(['int i', 'char c']) end @@ -83,6 +91,14 @@ module Fiddle assert_equal [[TYPE_INT,TYPE_VOIDP,TYPE_VOIDP], ['x', 'cb', 'name']], parse_struct_signature('int x; void (*cb)(); const char* name') end + def test_struct_undefined + assert_raises(DLError) { parse_struct_signature(['int i', 'DWORD cb']) } + end + + def test_struct_undefined_with_type_alias + assert_equal [[TYPE_INT,-TYPE_LONG], ['i', 'cb']], parse_struct_signature(['int i', 'DWORD cb'], {"DWORD" => "unsigned long"}) + end + def test_signature_basic func, ret, args = parse_signature('void func()') assert_equal 'func', func