ruby / fiddle

A libffi wrapper for Ruby.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Cannot parse the signature of the const argument.

kojix2 opened this issue · comments

Step to reproduce

t.c

int add(const int x, const int y){
  int sum = x + y;
  return sum;
}

gcc t.c -o add.so -fPIC -shared

t.rb

require 'fiddle/import'

module F
 extend Fiddle::Importer
 dlload "./add.so"
 extern "int add(const int x, const int y)"
end

p F.add(1, 2)

ruby t.rb

Actual behavior

Error

/home/kojix2/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/fiddle-1.0.8/lib/fiddle/cparser.rb:245:in `parse_ctype': unknown type: const (Fiddle::DLError)
	from /home/kojix2/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/fiddle-1.0.8/lib/fiddle/cparser.rb:117:in `block in parse_signature'
	from /home/kojix2/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/fiddle-1.0.8/lib/fiddle/cparser.rb:117:in `collect'
	from /home/kojix2/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/fiddle-1.0.8/lib/fiddle/cparser.rb:117:in `parse_signature'
	from /home/kojix2/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/fiddle-1.0.8/lib/fiddle/import.rb:168:in `extern'
	from t.rb:6:in `<module:F>'
	from t.rb:3:in `<main>'

Expected behavior

require 'fiddle/import'

module F
 extend Fiddle::Importer
 dlload "./add.so"
 extern "int add(int x, int y)" # If you remove const, it works as expected
end

p F.add(1, 2) #=> 3

Thanks for your report.
I've implemented.