|
1 | 1 | #![allow(non_upper_case_globals)] |
2 | | -use crate::cruby::{Qfalse, Qnil, Qtrue, VALUE, RUBY_T_ARRAY, RUBY_T_STRING, RUBY_T_HASH, RUBY_T_CLASS}; |
| 2 | +use crate::cruby::{Qfalse, Qnil, Qtrue, VALUE, RUBY_T_ARRAY, RUBY_T_STRING, RUBY_T_HASH, RUBY_T_CLASS, RUBY_T_MODULE}; |
3 | 3 | use crate::cruby::{rb_cInteger, rb_cFloat, rb_cArray, rb_cHash, rb_cString, rb_cSymbol, rb_cObject, rb_cTrueClass, rb_cFalseClass, rb_cNilClass, rb_cRange, rb_cSet, rb_cRegexp, rb_cClass, rb_cModule}; |
4 | 4 | use crate::cruby::ClassRelationship; |
5 | 5 | use crate::cruby::get_class_name; |
@@ -145,11 +145,6 @@ fn is_range_exact(val: VALUE) -> bool { |
145 | 145 | val.class_of() == unsafe { rb_cRange } |
146 | 146 | } |
147 | 147 |
|
148 | | -fn is_class_exact(val: VALUE) -> bool { |
149 | | - // Objects with RUBY_T_CLASS type and not instances of Module |
150 | | - val.builtin_type() == RUBY_T_CLASS && val.class_of() != unsafe { rb_cModule } |
151 | | -} |
152 | | - |
153 | 148 | impl Type { |
154 | 149 | /// Create a `Type` from the given integer. |
155 | 150 | pub const fn fixnum(val: i64) -> Type { |
@@ -202,7 +197,10 @@ impl Type { |
202 | 197 | else if is_string_exact(val) { |
203 | 198 | Type { bits: bits::StringExact, spec: Specialization::Object(val) } |
204 | 199 | } |
205 | | - else if is_class_exact(val) { |
| 200 | + else if val.builtin_type() == RUBY_T_MODULE { |
| 201 | + Type { bits: bits::ModuleExact, spec: Specialization::Object(val) } |
| 202 | + } |
| 203 | + else if val.builtin_type() == RUBY_T_CLASS { |
206 | 204 | Type { bits: bits::ClassExact, spec: Specialization::Object(val) } |
207 | 205 | } |
208 | 206 | else if val.class_of() == unsafe { rb_cRegexp } { |
@@ -301,6 +299,7 @@ impl Type { |
301 | 299 | if class == unsafe { rb_cFloat } { return true; } |
302 | 300 | if class == unsafe { rb_cHash } { return true; } |
303 | 301 | if class == unsafe { rb_cInteger } { return true; } |
| 302 | + if class == unsafe { rb_cModule } { return true; } |
304 | 303 | if class == unsafe { rb_cNilClass } { return true; } |
305 | 304 | if class == unsafe { rb_cObject } { return true; } |
306 | 305 | if class == unsafe { rb_cRange } { return true; } |
@@ -410,6 +409,7 @@ impl Type { |
410 | 409 | if self.is_subtype(types::FloatExact) { return Some(unsafe { rb_cFloat }); } |
411 | 410 | if self.is_subtype(types::HashExact) { return Some(unsafe { rb_cHash }); } |
412 | 411 | if self.is_subtype(types::IntegerExact) { return Some(unsafe { rb_cInteger }); } |
| 412 | + if self.is_subtype(types::ModuleExact) { return Some(unsafe { rb_cModule }); } |
413 | 413 | if self.is_subtype(types::NilClassExact) { return Some(unsafe { rb_cNilClass }); } |
414 | 414 | if self.is_subtype(types::ObjectExact) { return Some(unsafe { rb_cObject }); } |
415 | 415 | if self.is_subtype(types::RangeExact) { return Some(unsafe { rb_cRange }); } |
|
0 commit comments