From 199bbd73a36ec7b1a238653e19d5b0b2447d07a4 Mon Sep 17 00:00:00 2001 From: dearblue Date: Wed, 17 Mar 2021 23:01:52 +0900 Subject: Allow `break` in `build_config`. If I break out of a block given to `MRuby::Build.new` with `break` or `throw`, I will get a seemingly inexplicable error because the `presym`-related initialization is not done. ```console % cat build_config1.rb MRuby::Build.new do toolchain break end % rake CONFIG=build_config1.rb rake aborted! external mrbc or mruby-bin-mrbc gem in current('host') or 'host' build is required /var/tmp/mruby/lib/mruby/build.rb:332:in `mrbcfile' /var/tmp/mruby/tasks/mrblib.rake:9:in `block in ' /var/tmp/mruby/lib/mruby/build.rb:18:in `instance_eval' /var/tmp/mruby/lib/mruby/build.rb:18:in `block in each_target' /var/tmp/mruby/lib/mruby/build.rb:17:in `each' /var/tmp/mruby/lib/mruby/build.rb:17:in `each_target' /var/tmp/mruby/tasks/mrblib.rake:1:in `' /var/tmp/mruby/Rakefile:27:in `load' /var/tmp/mruby/Rakefile:27:in `' (See full trace by running task with --trace) ``` If a non-exceptional global jump occurs, it can be initialized by `ensure` to solve this problem. --- lib/mruby/build.rb | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/mruby/build.rb b/lib/mruby/build.rb index b9f26d49f..77decad6d 100644 --- a/lib/mruby/build.rb +++ b/lib/mruby/build.rb @@ -131,15 +131,22 @@ module MRuby end MRuby::Build.current = current - current.instance_eval(&block) - if current.libmruby_enabled? && !current.mrbcfile_external? - if current.presym_enabled? - current.create_mrbc_build if current.host? || current.gems["mruby-bin-mrbc"] - elsif current.host? - current.build_mrbc_exec + begin + current.instance_eval(&block) + rescue Exception => err + raise + ensure + unless err + if current.libmruby_enabled? && !current.mrbcfile_external? + if current.presym_enabled? + current.create_mrbc_build if current.host? || current.gems["mruby-bin-mrbc"] + elsif current.host? + current.build_mrbc_exec + end + end + current.presym = Presym.new(current) if current.presym_enabled? end end - current.presym = Presym.new(current) if current.presym_enabled? end def libmruby_enabled? -- cgit v1.2.3 From 0e4f438eca10d531b2824d7536bb6e8e2e811be6 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 18 Mar 2021 22:47:00 +0900 Subject: lib/mruby/build.rb: refactoring `ensure` clause; ref #5381 --- lib/mruby/build.rb | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/lib/mruby/build.rb b/lib/mruby/build.rb index 77decad6d..a99c0f507 100644 --- a/lib/mruby/build.rb +++ b/lib/mruby/build.rb @@ -133,19 +133,15 @@ module MRuby MRuby::Build.current = current begin current.instance_eval(&block) - rescue Exception => err - raise ensure - unless err - if current.libmruby_enabled? && !current.mrbcfile_external? - if current.presym_enabled? - current.create_mrbc_build if current.host? || current.gems["mruby-bin-mrbc"] - elsif current.host? - current.build_mrbc_exec - end + if current.libmruby_enabled? && !current.mrbcfile_external? + if current.presym_enabled? + current.create_mrbc_build if current.host? || current.gems["mruby-bin-mrbc"] + elsif current.host? + current.build_mrbc_exec end - current.presym = Presym.new(current) if current.presym_enabled? end + current.presym = Presym.new(current) if current.presym_enabled? end end -- cgit v1.2.3