Skip to content

Fallback to Hash for Mustermann::EqualityMap produces warnings and seems incorrect #89

@eregon

Description

@eregon

Mustermann::EqualityMap falls back to Hash if ObjectSpace::WeakMap is not defined.

def self.new
defined?(ObjectSpace::WeakMap) ? super : {}
end

However, this fallback doesn't seem correct as then

@map ||= EqualityMap.new
@map.fetch(string, options) { super(string, options) { options } }

ends up calling Hash#fetch with both a default value argument and a block.
This produces the warning:

.../gems/mustermann-1.0.2/lib/mustermann/pattern.rb:59: warning: block supersedes default value argument

And it means the second argument options is therefore ignored.

Mustermann::EqualityMap#fetch, used only if ObjectSpace::WeakMap is defined, has a different signature:

I guess one easy fix is to define it like fetch(key) and in pattern.rb call it like

@map.fetch([string, options]) { super(string, options) { options } }

See truffleruby/truffleruby#1375 (comment) for the original report in TruffleRuby.

Metadata

Metadata

Assignees

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