module RubyVM::RJIT::Type - ruby_vm: Ruby Standard Library Documentation

# module RubyVM::RJIT::Type

This returns an appropriate `Type` based on a known value

### Constants

BlockParamProxy
CString
False
Fixnum
Flonum
Hash
HeapSymbol
ImmSymbol
Nil
TArray
TString
True
Unknown

  List of types

UnknownHeap
UnknownImm

### Public Class Methods

from(val) click to toggle source

    # File ruby_vm/rjit/type.rb, line 145
    def from(val)
      if C::SPECIAL_CONST_P(val)
        if fixnum?(val)
          Type::Fixnum
        elsif val.nil?
          Type::Nil
        elsif val == true
          Type::True
        elsif val == false
          Type::False
        elsif static_symbol?(val)
          Type::ImmSymbol
        elsif flonum?(val)
          Type::Flonum
        else
          raise "Illegal value: #{val.inspect}"
        end
      else
        val_class = C.to_value(C.rb_class_of(val))
        if val_class == C.rb_cString && C.rb_obj_frozen_p(val)
          return Type::CString
        end
        if C.to_value(val) == C.rb_block_param_proxy
          return Type::BlockParamProxy
        end
        case C::BUILTIN_TYPE(val)
        in C::RUBY_T_ARRAY
          Type::TArray
        in C::RUBY_T_HASH
          Type::Hash
        in C::RUBY_T_STRING
          Type::TString
        else
          Type::UnknownHeap
        end
      end
    end

### Private Class Methods

fixnum?(obj) click to toggle source

    # File ruby_vm/rjit/type.rb, line 185
    def fixnum?(obj)
      (C.to_value(obj) & C::RUBY_FIXNUM_FLAG) == C::RUBY_FIXNUM_FLAG
    end

flonum?(obj) click to toggle source

    # File ruby_vm/rjit/type.rb, line 189
    def flonum?(obj)
      (C.to_value(obj) & C::RUBY_FLONUM_MASK) == C::RUBY_FLONUM_FLAG
    end

static_symbol?(obj) click to toggle source

    # File ruby_vm/rjit/type.rb, line 193
    def static_symbol?(obj)
      (C.to_value(obj) & 0xff) == C::RUBY_SYMBOL_FLAG
    end