diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-12-31 11:21:11 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2018-12-31 11:21:11 +0900 |
| commit | a5ad768cac7361fd743708339bf27d9a3dc654bb (patch) | |
| tree | b2e115f898a5c0c291b25bcf87d3888e83f8aa56 | |
| parent | 37d795dec7b495d418dc2f9020cf980c158ba9ed (diff) | |
| parent | 482b2ea01e0bf13d0f7900272031ec6e0d2777a9 (diff) | |
| download | mruby-a5ad768cac7361fd743708339bf27d9a3dc654bb.tar.gz mruby-a5ad768cac7361fd743708339bf27d9a3dc654bb.zip | |
Merge pull request #4204 from shuujii/fix-yacc-running-multiple-times
Fix Yacc running multiple times.
| -rw-r--r-- | lib/mruby/gem.rb | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/lib/mruby/gem.rb b/lib/mruby/gem.rb index a1216aced..b32b1eed2 100644 --- a/lib/mruby/gem.rb +++ b/lib/mruby/gem.rb @@ -52,6 +52,8 @@ module MRuby end def setup + return if defined?(@linker) # return if already set up + MRuby::Gem.current = self MRuby::Build::COMMANDS.each do |command| instance_variable_set("@#{command}", @build.send(command).clone) @@ -334,26 +336,26 @@ module MRuby end def generate_gem_table build - gem_table = @ary.reduce({}) { |res,v| res[v.name] = v; res } + gem_table = each_with_object({}) { |spec, h| h[spec.name] = spec } - default_gems = [] + default_gems = {} each do |g| g.dependencies.each do |dep| - default_gems << default_gem_params(dep) unless gem_table.key? dep[:gem] + default_gems[dep[:gem]] ||= default_gem_params(dep) end end until default_gems.empty? - def_gem = default_gems.pop + def_name, def_gem = default_gems.shift + next if gem_table[def_name] - spec = build.gem def_gem[:default] - fail "Invalid gem name: #{spec.name} (Expected: #{def_gem[:gem]})" if spec.name != def_gem[:gem] + spec = gem_table[def_name] = build.gem(def_gem[:default]) + fail "Invalid gem name: #{spec.name} (Expected: #{def_name})" if spec.name != def_name spec.setup spec.dependencies.each do |dep| - default_gems << default_gem_params(dep) unless gem_table.key? dep[:gem] + default_gems[dep[:gem]] ||= default_gem_params(dep) end - gem_table[spec.name] = spec end each do |g| @@ -428,7 +430,8 @@ module MRuby end def import_include_paths(g) - gem_table = @ary.reduce({}) { |res,v| res[v.name] = v; res } + gem_table = each_with_object({}) { |spec, h| h[spec.name] = spec } + g.dependencies.each do |dep| dep_g = gem_table[dep[:gem]] # We can do recursive call safely |
