diff options
| author | Sutou Kouhei <kou@clear-code.com> | 2023-05-24 16:38:39 +0900 |
|---|---|---|
| committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2023-06-28 16:36:50 +0900 |
| commit | ebf14d01ba6c586e0ea6dd79ad19c5efa841d4c6 (patch) | |
| tree | a6d24c4efae17229c74be026809ebcf5b164e602 | |
| parent | 85937f3a0afeb7a2b3f9b8cb0dcaa8a20c49e09d (diff) | |
[ruby/fiddle] Add support for "long" variants
GitHub: fix https://github.com/ruby/fiddle/pull/100
Reported by David M. Lary. Thanks!!!
https://github.com/ruby/fiddle/commit/516333dd78
| -rw-r--r-- | ext/fiddle/lib/fiddle/cparser.rb | 12 | ||||
| -rw-r--r-- | test/fiddle/test_cparser.rb | 18 |
2 files changed, 27 insertions, 3 deletions
diff --git a/ext/fiddle/lib/fiddle/cparser.rb b/ext/fiddle/lib/fiddle/cparser.rb index 9a70402953..257a52d096 100644 --- a/ext/fiddle/lib/fiddle/cparser.rb +++ b/ext/fiddle/lib/fiddle/cparser.rb @@ -165,10 +165,16 @@ module Fiddle raise(RuntimeError, "unsupported type: #{ty}") end return TYPE_ULONG_LONG - when /\A(?:signed\s+)?long(?:\s+int\s+)?(?:\s+\w+)?\z/ - return TYPE_LONG - when /\Aunsigned\s+long(?:\s+int\s+)?(?:\s+\w+)?\z/ + when /\Aunsigned\s+long(?:\s+int\s+)?(?:\s+\w+)?\z/, + /\Aunsigned\s+int\s+long(?:\s+\w+)?\z/, + /\Along(?:\s+int)?\s+unsigned(?:\s+\w+)?\z/, + /\Aint\s+unsigned\s+long(?:\s+\w+)?\z/, + /\A(?:int\s+)?long\s+unsigned(?:\s+\w+)?\z/ return TYPE_ULONG + when /\A(?:signed\s+)?long(?:\s+int\s+)?(?:\s+\w+)?\z/, + /\A(?:signed\s+)?int\s+long(?:\s+\w+)?\z/, + /\Along(?:\s+int)?\s+signed(?:\s+\w+)?\z/ + return TYPE_LONG when /\A(?:signed\s+)?int(?:\s+\w+)?\z/ return TYPE_INT when /\A(?:unsigned\s+int|uint)(?:\s+\w+)?\z/ diff --git a/test/fiddle/test_cparser.rb b/test/fiddle/test_cparser.rb index ae319197a4..b34b4c6fa5 100644 --- a/test/fiddle/test_cparser.rb +++ b/test/fiddle/test_cparser.rb @@ -50,14 +50,32 @@ module Fiddle assert_equal(TYPE_LONG, parse_ctype('const long')) assert_equal(TYPE_LONG, parse_ctype('long int')) assert_equal(TYPE_LONG, parse_ctype('const long int')) + assert_equal(TYPE_LONG, parse_ctype('int long')) + assert_equal(TYPE_LONG, parse_ctype('const int long')) assert_equal(TYPE_LONG, parse_ctype('signed long')) assert_equal(TYPE_LONG, parse_ctype('const signed long')) assert_equal(TYPE_LONG, parse_ctype('signed long int')) assert_equal(TYPE_LONG, parse_ctype('const signed long int')) + assert_equal(TYPE_LONG, parse_ctype('signed int long')) + assert_equal(TYPE_LONG, parse_ctype('const signed int long')) + assert_equal(TYPE_LONG, parse_ctype('long signed')) + assert_equal(TYPE_LONG, parse_ctype('const long signed')) + assert_equal(TYPE_LONG, parse_ctype('long int signed')) + assert_equal(TYPE_LONG, parse_ctype('const long int signed')) + assert_equal(TYPE_LONG, parse_ctype('int long signed')) + assert_equal(TYPE_LONG, parse_ctype('const int long signed')) assert_equal(-TYPE_LONG, parse_ctype('unsigned long')) assert_equal(-TYPE_LONG, parse_ctype('const unsigned long')) assert_equal(-TYPE_LONG, parse_ctype('unsigned long int')) assert_equal(-TYPE_LONG, parse_ctype('const unsigned long int')) + assert_equal(-TYPE_LONG, parse_ctype('long int unsigned')) + assert_equal(-TYPE_LONG, parse_ctype('const long int unsigned')) + assert_equal(-TYPE_LONG, parse_ctype('unsigned int long')) + assert_equal(-TYPE_LONG, parse_ctype('const unsigned int long')) + assert_equal(-TYPE_LONG, parse_ctype('int unsigned long')) + assert_equal(-TYPE_LONG, parse_ctype('const int unsigned long')) + assert_equal(-TYPE_LONG, parse_ctype('int long unsigned')) + assert_equal(-TYPE_LONG, parse_ctype('const int long unsigned')) end def test_size_t_ctype |
