Skip to content

Cannot parse the signature of the const argument.  #68

@kojix2

Description

@kojix2

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions