-
Notifications
You must be signed in to change notification settings - Fork 63
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
Fallback to Hash for Mustermann::EqualityMap produces warnings and seems incorrect #89
Comments
@namusyaka Hello, could you take a look at this issue? |
@eregon Your fix looks reasonable to me. Could you send a patch? |
@namusyaka Thank you for taking a look, I'll make a PR. |
eregon
added a commit
to eregon/mustermann
that referenced
this issue
Aug 6, 2018
* Fixes sinatra#89. * Add specs to prevent regressions. * #dup the key if needed as ObjectSpace::WeakMap requires non-frozen key and value: $ ruby -v (also happens on MRI 2.5.1) ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux] $ ruby -e 'ObjectSpace::WeakMap.new["foo"] = "bar"' $ ruby -e 'ObjectSpace::WeakMap.new["foo".freeze] = "bar"' -e:1:in `[]=': can't modify frozen String (RuntimeError) $ ruby -e 'ObjectSpace::WeakMap.new["foo"] = "bar".freeze' -e:1:in `[]=': can't modify frozen String (RuntimeError)
eregon
added a commit
to eregon/mustermann
that referenced
this issue
Aug 6, 2018
* Fixes sinatra#89. * Add specs to prevent regressions. * #dup the key if needed as ObjectSpace::WeakMap requires non-frozen key and value: $ ruby -v (also happens on MRI 2.5.1) ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux] $ ruby -e 'ObjectSpace::WeakMap.new["foo"] = "bar"' $ ruby -e 'ObjectSpace::WeakMap.new["foo".freeze] = "bar"' -e:1:in `[]=': can't modify frozen String (RuntimeError) $ ruby -e 'ObjectSpace::WeakMap.new["foo"] = "bar".freeze' -e:1:in `[]=': can't modify frozen String (RuntimeError)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Mustermann::EqualityMap falls back to
Hash
ifObjectSpace::WeakMap
is not defined.mustermann/mustermann/lib/mustermann/equality_map.rb
Lines 21 to 23 in 6610061
However, this fallback doesn't seem correct as then
mustermann/mustermann/lib/mustermann/pattern.rb
Lines 58 to 59 in 6610061
ends up calling
Hash#fetch
with both a default value argument and a block.This produces the warning:
And it means the second argument
options
is therefore ignored.Mustermann::EqualityMap#fetch
, used only ifObjectSpace::WeakMap
is defined, has a different signature:mustermann/mustermann/lib/mustermann/equality_map.rb
Line 33 in 6610061
I guess one easy fix is to define it like
fetch(key)
and in pattern.rb call it likeSee oracle/truffleruby#1375 (comment) for the original report in TruffleRuby.
The text was updated successfully, but these errors were encountered: