@@ -55,6 +55,16 @@ protected int size(RubyWeakMap map) {
55
55
@ CoreMethod (names = { "key?" , "member?" , "include?" }, required = 1 )
56
56
public abstract static class MemberNode extends CoreMethodArrayArgumentsNode {
57
57
58
+ @ Specialization // ensures all integer keys are promoted to long
59
+ protected Object isMember (RubyWeakMap map , long key ) {
60
+ return isMember (map , (Object ) key );
61
+ }
62
+
63
+ @ Specialization // ensures all floating keys are promoted to double
64
+ protected Object isMember (RubyWeakMap map , double key ) {
65
+ return isMember (map , (Object ) key );
66
+ }
67
+
58
68
@ Specialization
59
69
protected boolean isMember (RubyWeakMap map , Object key ) {
60
70
return map .storage .get (key ) != null ;
@@ -64,6 +74,16 @@ protected boolean isMember(RubyWeakMap map, Object key) {
64
74
@ CoreMethod (names = "[]" , required = 1 )
65
75
public abstract static class GetIndexNode extends CoreMethodArrayArgumentsNode {
66
76
77
+ @ Specialization // ensures all integer keys are promoted to long
78
+ protected Object get (RubyWeakMap map , long key ) {
79
+ return get (map , (Object ) key );
80
+ }
81
+
82
+ @ Specialization // ensures all floating keys are promoted to double
83
+ protected Object get (RubyWeakMap map , double key ) {
84
+ return get (map , (Object ) key );
85
+ }
86
+
67
87
@ Specialization
68
88
protected Object get (RubyWeakMap map , Object key ) {
69
89
Object value = map .storage .get (key );
@@ -74,6 +94,16 @@ protected Object get(RubyWeakMap map, Object key) {
74
94
@ Primitive (name = "weakmap_aset" )
75
95
public abstract static class SetIndexNode extends CoreMethodArrayArgumentsNode {
76
96
97
+ @ Specialization // ensures all integer keys are promoted to long
98
+ protected Object set (RubyWeakMap map , long key , Object value ) {
99
+ return set (map , (Object ) key , value );
100
+ }
101
+
102
+ @ Specialization // ensures all floating keys are promoted to double
103
+ protected Object set (RubyWeakMap map , double key , Object value ) {
104
+ return set (map , (Object ) key , value );
105
+ }
106
+
77
107
@ Specialization
78
108
protected Object set (RubyWeakMap map , Object key , Object value ) {
79
109
map .storage .put (key , value );
0 commit comments