Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gem markly doesn't seem to work with TruffleRuby #3207

Closed
mtortonesi opened this issue Aug 11, 2023 · 4 comments · Fixed by ioquatix/markly#7
Closed

Gem markly doesn't seem to work with TruffleRuby #3207

mtortonesi opened this issue Aug 11, 2023 · 4 comments · Fixed by ioquatix/markly#7
Labels
cexts third-party-issue An issue which should be fixed upstream

Comments

@mtortonesi
Copy link
Contributor

When trying to launch:

bundle exec bake modernize

under truffleruby+graalvm-23.0.0 (installed from rbenv+ruby-build on an M1 MacBookPro), I get the following trace:

bundler: failed to load command: bake (/Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/bin/bake)
define.c:75:in `rb_define_singleton_method': Message not supported. (Polyglot::ForeignException)
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/markly-0.9.0/ext/markly/markly.c:1152:in `Init_markly'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/markly-0.9.0/lib/markly.rb:11:in `'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/markly-0.9.0/lib/markly.rb:11:in `Kernel#gem_original_require'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/markly-0.9.0/lib/markly.rb:11:in `'
	from  core/kernel.rb:234:in `Kernel#gem_original_require'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-modernize-0.17.8/bake/modernize/actions.rb:8:in `load'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/scope.rb:36:in `Bake::Scope.load'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/loader.rb:61:in `Bake::Loader#scope_for'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/context.rb:178:in `block in Bake::Context#base_for'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/loaders.rb:66:in `Array#each'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/loaders.rb:66:in `Bake::Loaders#each'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/context.rb:177:in `Bake::Context#base_for'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/context.rb:168:in `Bake::Context#instance_for'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/context.rb:86:in `block in Bake::Context#initialize'
	from  core/hash.rb:186:in `Hash#default'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/context.rb:154:in `Hash#[]'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/context.rb:154:in `Bake::Context#recipe_for'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/context.rb:100:in `block in Bake::Context#initialize'
	from  core/hash.rb:186:in `Hash#default'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/context.rb:120:in `Hash#[]'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/context.rb:120:in `Bake::Context#call'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/base.rb:74:in `Bake::Base#call'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-modernize-0.17.8/bake/modernize.rb:7:in `##modernize'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/recipe.rb:130:in `Bake::Recipe#call'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/context.rb:122:in `Bake::Context#call'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/command/call.rb:50:in `Bake::Command::Call#call'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/command/top.rb:78:in `Bake::Command::Top#call'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/samovar-2.2.0/lib/samovar/command.rb:21:in `Samovar::Command.call'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/lib/bake/command.rb:29:in `Bake::Command.call'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/gems/bake-0.18.2/bin/bake:29:in `'
	from  core/kernel.rb:381:in `Kernel#load'
	from /Users/mauro/code/test/truffleruby/reinforce/vendor/bundle/truffleruby/3.1.3.23.0.0/bin/bake:25:in `'
	from  core/kernel.rb:381:in `Kernel#load'
	from /Users/mauro/.rbenv/versions/truffleruby+graalvm-23.0.0/graalvm/Contents/Home/languages/ruby/lib/mri/bundler/cli/exec.rb:58:in `Bundler::Exec#kernel_load'
	from /Users/mauro/.rbenv/versions/truffleruby+graalvm-23.0.0/graalvm/Contents/Home/languages/ruby/lib/mri/bundler/cli/exec.rb:23:in `Bundler::Exec#run'
	from /Users/mauro/.rbenv/versions/truffleruby+graalvm-23.0.0/graalvm/Contents/Home/languages/ruby/lib/mri/bundler/cli.rb:486:in `Bundler::CLI#exec'
	from /Users/mauro/.rbenv/versions/truffleruby+graalvm-23.0.0/graalvm/Contents/Home/languages/ruby/lib/mri/bundler/vendor/thor/lib/thor/command.rb:27:in `Thor::Command#run'
	from /Users/mauro/.rbenv/versions/truffleruby+graalvm-23.0.0/graalvm/Contents/Home/languages/ruby/lib/mri/bundler/vendor/thor/lib/thor/invocation.rb:127:in `Thor::Invocation#invoke_command'
	from /Users/mauro/.rbenv/versions/truffleruby+graalvm-23.0.0/graalvm/Contents/Home/languages/ruby/lib/mri/bundler/vendor/thor/lib/thor.rb:392:in `Thor.dispatch'
	from /Users/mauro/.rbenv/versions/truffleruby+graalvm-23.0.0/graalvm/Contents/Home/languages/ruby/lib/mri/bundler/cli.rb:31:in `Bundler::CLI.dispatch'
	from /Users/mauro/.rbenv/versions/truffleruby+graalvm-23.0.0/graalvm/Contents/Home/languages/ruby/lib/mri/bundler/vendor/thor/lib/thor/base.rb:485:in `Thor::Base::ClassMethods#start'
	from /Users/mauro/.rbenv/versions/truffleruby+graalvm-23.0.0/graalvm/Contents/Home/languages/ruby/lib/mri/bundler/cli.rb:25:in `Bundler::CLI.start'
	from /Users/mauro/.rbenv/versions/truffleruby+graalvm-23.0.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/bundler-2.3.26/libexec/bundle:48:in `block in '
	from /Users/mauro/.rbenv/versions/truffleruby+graalvm-23.0.0/graalvm/Contents/Home/languages/ruby/lib/mri/bundler/friendly_errors.rb:120:in `Bundler.with_friendly_errors'
	from /Users/mauro/.rbenv/versions/truffleruby+graalvm-23.0.0/graalvm/Contents/Home/languages/ruby/lib/gems/gems/bundler-2.3.26/libexec/bundle:36:in `'
	from  core/kernel.rb:381:in `Kernel#load'
	from /Users/mauro/.rbenv/versions/truffleruby+graalvm-23.0.0/graalvm/Contents/Home/languages/ruby/bin/bundle:44:in `'

Not sure what's really going on here, because rb_define_singleton_method should be working on TruffleRuby. Would be happy to help but really don't know where to start. Any hints?

@mtortonesi mtortonesi changed the title Gem bake-modernize doesn't seem to work with TruffleRuby Gem markly doesn't seem to work with TruffleRuby Aug 11, 2023
@mtortonesi
Copy link
Contributor Author

As @ioquatix suggested, I changed the title to clarify that the issue is caused by the markly gem. Simply calling:

require 'markly'

on TruffleRuby generates the error above.

@eregon eregon added the third-party-issue An issue which should be fixed upstream label Aug 11, 2023
@eregon
Copy link
Member

eregon commented Aug 11, 2023

It's a bug of the markly gem:
https://github.com/ioquatix/markly/blob/v0.9.0/ext/markly/markly.c#L1185
is called before rb_Markly_Node is assigned.
And the problem still exists on master it seems: https://github.com/ioquatix/markly/blob/main/ext/markly/markly.c#L1185
Please report it upstream (and sorry for the extra hop here).

On CRuby maybe this defines a parse method on 0=Qfalse?

So I guess we should probably support rb_define_singleton_method(Qfalse, ...) on TruffleRuby (although there might be no intended usage of that).

@eregon eregon added the cexts label Aug 11, 2023
@ioquatix
Copy link
Contributor

ioquatix commented Aug 11, 2023

That is hilarious, thanks for the analysis. I believe we can close this, I'll fix markly. Probably CRuby should not allow defining methods like this (i.e. we should make it a clear bug/warning).

@ioquatix
Copy link
Contributor

irb(main):003:0> false.parse("# Foo")
(irb):3:in `parse': wrong argument type false (expected Markly::Parser) (TypeError)

There is egg on my face :p

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cexts third-party-issue An issue which should be fixed upstream
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants