Skip to content

Commit 516333d

Browse files
committed
Add support for "long" variants
GitHub: fix GH-100 Reported by David M. Lary. Thanks!!!
1 parent 04238ce commit 516333d

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

lib/fiddle/cparser.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,16 @@ def parse_ctype(ty, tymap=nil)
165165
raise(RuntimeError, "unsupported type: #{ty}")
166166
end
167167
return TYPE_ULONG_LONG
168-
when /\A(?:signed\s+)?long(?:\s+int\s+)?(?:\s+\w+)?\z/
169-
return TYPE_LONG
170-
when /\Aunsigned\s+long(?:\s+int\s+)?(?:\s+\w+)?\z/
168+
when /\Aunsigned\s+long(?:\s+int\s+)?(?:\s+\w+)?\z/,
169+
/\Aunsigned\s+int\s+long(?:\s+\w+)?\z/,
170+
/\Along(?:\s+int)?\s+unsigned(?:\s+\w+)?\z/,
171+
/\Aint\s+unsigned\s+long(?:\s+\w+)?\z/,
172+
/\A(?:int\s+)?long\s+unsigned(?:\s+\w+)?\z/
171173
return TYPE_ULONG
174+
when /\A(?:signed\s+)?long(?:\s+int\s+)?(?:\s+\w+)?\z/,
175+
/\A(?:signed\s+)?int\s+long(?:\s+\w+)?\z/,
176+
/\Along(?:\s+int)?\s+signed(?:\s+\w+)?\z/
177+
return TYPE_LONG
172178
when /\A(?:signed\s+)?int(?:\s+\w+)?\z/
173179
return TYPE_INT
174180
when /\A(?:unsigned\s+int|uint)(?:\s+\w+)?\z/

test/fiddle/test_cparser.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,32 @@ def test_long_ctype
5050
assert_equal(TYPE_LONG, parse_ctype('const long'))
5151
assert_equal(TYPE_LONG, parse_ctype('long int'))
5252
assert_equal(TYPE_LONG, parse_ctype('const long int'))
53+
assert_equal(TYPE_LONG, parse_ctype('int long'))
54+
assert_equal(TYPE_LONG, parse_ctype('const int long'))
5355
assert_equal(TYPE_LONG, parse_ctype('signed long'))
5456
assert_equal(TYPE_LONG, parse_ctype('const signed long'))
5557
assert_equal(TYPE_LONG, parse_ctype('signed long int'))
5658
assert_equal(TYPE_LONG, parse_ctype('const signed long int'))
59+
assert_equal(TYPE_LONG, parse_ctype('signed int long'))
60+
assert_equal(TYPE_LONG, parse_ctype('const signed int long'))
61+
assert_equal(TYPE_LONG, parse_ctype('long signed'))
62+
assert_equal(TYPE_LONG, parse_ctype('const long signed'))
63+
assert_equal(TYPE_LONG, parse_ctype('long int signed'))
64+
assert_equal(TYPE_LONG, parse_ctype('const long int signed'))
65+
assert_equal(TYPE_LONG, parse_ctype('int long signed'))
66+
assert_equal(TYPE_LONG, parse_ctype('const int long signed'))
5767
assert_equal(-TYPE_LONG, parse_ctype('unsigned long'))
5868
assert_equal(-TYPE_LONG, parse_ctype('const unsigned long'))
5969
assert_equal(-TYPE_LONG, parse_ctype('unsigned long int'))
6070
assert_equal(-TYPE_LONG, parse_ctype('const unsigned long int'))
71+
assert_equal(-TYPE_LONG, parse_ctype('long int unsigned'))
72+
assert_equal(-TYPE_LONG, parse_ctype('const long int unsigned'))
73+
assert_equal(-TYPE_LONG, parse_ctype('unsigned int long'))
74+
assert_equal(-TYPE_LONG, parse_ctype('const unsigned int long'))
75+
assert_equal(-TYPE_LONG, parse_ctype('int unsigned long'))
76+
assert_equal(-TYPE_LONG, parse_ctype('const int unsigned long'))
77+
assert_equal(-TYPE_LONG, parse_ctype('int long unsigned'))
78+
assert_equal(-TYPE_LONG, parse_ctype('const int long unsigned'))
6179
end
6280

6381
def test_size_t_ctype

0 commit comments

Comments
 (0)