Package org.jruby

Class RubyBasicObject

java.lang.Object
org.jruby.RubyBasicObject
All Implemented Interfaces:
Serializable, Cloneable, Comparable<IRubyObject>, InstanceVariables, InternalVariables, IRubyObject, CoreObjectType
Direct Known Subclasses:
RubyObject

RubyBasicObject is the only implementation of the IRubyObject. Every Ruby object in JRuby is represented by something that is an instance of RubyBasicObject. In the core class implementations, this means doing a subclass that extends RubyBasicObject. In other cases it means using a simple RubyBasicObject instance and its data fields to store specific information about the Ruby object. Some care has been taken to make the implementation be as monomorphic as possible, so that the Java Hotspot engine can improve performance of it. That is the reason for several patterns that might seem odd in this class. The IRubyObject interface used to have lots of methods for different things, but these have now mostly been refactored into several interfaces that gives access to that specific part of the object. This gives us the possibility to switch out that subsystem without changing interfaces again. For example, instance variable and internal variables are handled this way, but the implementation in RubyObject only returns "this" in getInstanceVariables() and getInternalVariables(). Methods that are implemented here, such as "initialize" should be implemented with care; reification of Ruby classes into Java classes can produce conflicting method names in rare cases. See JRUBY-5906 for an example.
See Also:
  • Field Details

    • metaClass

      protected transient RubyClass metaClass
      The class of this object
    • flags

      protected int flags
      object flags
    • varTable

      public transient Object[] varTable
      variable table, lazily allocated as needed (if needed)
    • varTableStamp

      public transient volatile int varTableStamp
      locking stamp for Unsafe ops updating the vartable
    • ERR_INSECURE_SET_INST_VAR

      public static final String ERR_INSECURE_SET_INST_VAR
      The error message used when some one tries to modify an instance variable in a high security setting.
      See Also:
    • ALL_F

      public static final int ALL_F
      See Also:
    • FALSE_F

      public static final int FALSE_F
    • NIL_F

      public static final int NIL_F
      This flag is a bit funny. It's used to denote that this value is nil. It's a bit counterintuitive for a Java programmer to not use subclassing to handle this case, since we have a RubyNil subclass anyway. Well, the reason for it being a flag is that the isNil() method is called extremely often. So often that it gives a good speed boost to make it monomorphic and final. It turns out using a flag for this actually gives us better performance than having a polymorphic isNil() method.
    • FROZEN_F

      public static final int FROZEN_F
    • NEVER

      public static final IRubyObject NEVER
      A value that is used as a null sentinel in among other places the RubyArray implementation. It will cause large problems to call any methods on this object.
    • UNDEF

      public static final IRubyObject UNDEF
      A value that specifies an undefined value. This value is used as a sentinel for undefined constant values, and other places where neither null nor NEVER makes sense.
    • BASICOBJECT_ALLOCATOR

      public static final ObjectAllocator BASICOBJECT_ALLOCATOR
      Default allocator instance for all Ruby objects. The only reason to not use this allocator is if you actually need to have all instances of something be a subclass of RubyObject.
      See Also:
    • FL_USHIFT

      @Deprecated public static final int FL_USHIFT
      Deprecated.
      See Also:
    • USER0_F

      @Deprecated public static final int USER0_F
      Deprecated.
      See Also:
    • USER1_F

      @Deprecated public static final int USER1_F
      Deprecated.
      See Also:
    • USER2_F

      @Deprecated public static final int USER2_F
      Deprecated.
      See Also:
    • USER3_F

      @Deprecated public static final int USER3_F
      Deprecated.
      See Also:
    • USER4_F

      @Deprecated public static final int USER4_F
      Deprecated.
      See Also:
    • USER5_F

      @Deprecated public static final int USER5_F
      Deprecated.
      See Also:
    • USER6_F

      @Deprecated public static final int USER6_F
      Deprecated.
      See Also:
    • USER7_F

      @Deprecated public static final int USER7_F
      Deprecated.
      See Also:
    • USER8_F

      @Deprecated public static final int USER8_F
      Deprecated.
      See Also:
    • USER9_F

      @Deprecated public static final int USER9_F
      Deprecated.
      See Also:
    • USERA_F

      @Deprecated public static final int USERA_F
      Deprecated.
      See Also:
    • REFINED_MODULE_F

      @Deprecated public static final int REFINED_MODULE_F
      Deprecated.
      See Also:
    • IS_OVERLAID_F

      @Deprecated public static final int IS_OVERLAID_F
      Deprecated.
      See Also:
    • COMPARE_BY_IDENTITY_F

      @Deprecated public static final int COMPARE_BY_IDENTITY_F
      Deprecated.
      See Also:
    • TAINTED_F

      @Deprecated public static final int TAINTED_F
      Deprecated.
      See Also:
    • VAR_TABLE_OFFSET

      @Deprecated public static final long VAR_TABLE_OFFSET
      Deprecated.
      See Also:
    • STAMP_OFFSET

      @Deprecated public static final long STAMP_OFFSET
      Deprecated.
      See Also:
  • Constructor Details

    • RubyBasicObject

      public RubyBasicObject(Ruby runtime, RubyClass metaClass)
      Standard path for object creation. Objects are entered into ObjectSpace only if ObjectSpace is enabled.
      Parameters:
      runtime - the runtime
      metaClass - the meta class
    • RubyBasicObject

      public RubyBasicObject(RubyClass metaClass)
      Path for objects that don't enter objectspace.
      Parameters:
      metaClass - the new metaclass
    • RubyBasicObject

      protected RubyBasicObject(Ruby runtime, RubyClass metaClass, boolean useObjectSpace)
      Path for objects who want to decide whether they don't want to be in ObjectSpace even when it is on. (notably used by objects being considered immediate, they'll always pass false here)
      Parameters:
      runtime - the runtime
      metaClass - the metaclass
      useObjectSpace - should object space be enabled
    • RubyBasicObject

      @Deprecated protected RubyBasicObject(Ruby runtime, RubyClass metaClass, boolean useObjectSpace, boolean canBeTainted)
      Deprecated.
  • Method Details

    • finishBasicObjectClass

      public static void finishBasicObjectClass(ThreadContext context, RubyClass BasicObject)
      Will create the Ruby class BasicObject in the runtime specified. This method needs to take the actual class as an argument because of the Object class' central part in runtime initialization.
      Parameters:
      context - the thread context
      BasicObject - reference to BasicObject
    • initialize

      public IRubyObject initialize(ThreadContext context)
    • testFrozen

      protected final void testFrozen(String message)
      rb_frozen_class_p Helper to test whether this object is frozen, and if it is will throw an exception based on the message.
      Parameters:
      message - is frozen
    • testFrozen

      protected final void testFrozen()
      rb_frozen_class_p Helper to test whether this object is frozen, and if it is will throw an exception based on the message.
    • setFlag

      public final void setFlag(int flag, boolean set)
      Sets or unsets a flag on this object. The only flags that are guaranteed to be valid to use as the first argument is:
      Parameters:
      flag - the actual flag to set or unset.
      set - if true, the flag will be set, if false, the flag will be unset.
    • getFlag

      public final boolean getFlag(int flag)
      Get the value of a custom flag on this object. The only guaranteed flags that can be sent in to this method is:
      Parameters:
      flag - the flag to get
      Returns:
      true if the flag is set, false otherwise
    • checkCallMethod

      public final IRubyObject checkCallMethod(ThreadContext context, String name)
      Will invoke a named method with no arguments and no block if that method or a custom method missing exists. Otherwise returns null. 1.9: rb_check_funcall
      Specified by:
      checkCallMethod in interface IRubyObject
    • checkCallMethod

      public final IRubyObject checkCallMethod(ThreadContext context, JavaSites.CheckedSites sites)
      Will invoke a named method with no arguments and no block if that method or a custom method missing exists. Otherwise returns null. 1.9: rb_check_funcall
      Specified by:
      checkCallMethod in interface IRubyObject
    • callMethod

      public final IRubyObject callMethod(ThreadContext context, String name)
      Will invoke a named method with no arguments and no block.
      Specified by:
      callMethod in interface IRubyObject
    • callMethod

      public final IRubyObject callMethod(ThreadContext context, String name, IRubyObject arg)
      Will invoke a named method with one argument and no block with functional invocation.
      Specified by:
      callMethod in interface IRubyObject
    • callMethod

      public final IRubyObject callMethod(ThreadContext context, String name, IRubyObject[] args)
      Will invoke a named method with the supplied arguments and no block with functional invocation.
      Specified by:
      callMethod in interface IRubyObject
    • callMethod

      public final IRubyObject callMethod(String name, IRubyObject... args)
    • callMethod

      public final IRubyObject callMethod(String name, IRubyObject arg)
    • callMethod

      public final IRubyObject callMethod(String name)
    • callMethod

      public final IRubyObject callMethod(ThreadContext context, String name, IRubyObject[] args, Block block)
      Will invoke a named method with the supplied arguments and supplied block with functional invocation.
      Specified by:
      callMethod in interface IRubyObject
    • isNil

      public final boolean isNil()
      Does this object represent nil? See the docs for the NIL_F flag for more information.
      Specified by:
      isNil in interface IRubyObject
      Returns:
      true for nil only
    • isTrue

      public final boolean isTrue()
      Is this value a truthy value or not? Based on the FALSE_F flag.
      Specified by:
      isTrue in interface IRubyObject
      Returns:
      true it truthy
    • isFalse

      public final boolean isFalse()
      Is this value a falsey value or not? Based on the FALSE_F flag.
      Returns:
      true is false
    • isFrozen

      public boolean isFrozen()
      Is this value frozen or not? Shortcut for doing getFlag(FROZEN_F).
      Specified by:
      isFrozen in interface IRubyObject
      Returns:
      true if this object is frozen, false otherwise
    • setFrozen

      public void setFrozen(boolean frozen)
      Sets whether this object is frozen or not. Shortcut for doing setFlag(FROZEN_F, frozen).
      Specified by:
      setFrozen in interface IRubyObject
      Parameters:
      frozen - should this object be frozen?
    • isImmediate

      public boolean isImmediate()
      Is object immediate (def: Fixnum, Symbol, true, false, nil?).
      Specified by:
      isImmediate in interface IRubyObject
      Returns:
      boolean
    • isSpecialConst

      public boolean isSpecialConst()
      Description copied from interface: IRubyObject
      Is this a special constant
      Specified by:
      isSpecialConst in interface IRubyObject
      Returns:
      boolean
    • isSpecialObject

      public boolean isSpecialObject()
    • getMetaClass

      public final RubyClass getMetaClass()
      if exist return the meta-class else return the type of the object.
      Specified by:
      getMetaClass in interface IRubyObject
      Returns:
      the Ruby (meta) class
    • getMetaClass

      public static RubyClass getMetaClass(IRubyObject arg)
    • getSingletonClass

      public RubyClass getSingletonClass()
      Description copied from interface: IRubyObject
      Retrieve self.singleton_class.
      Specified by:
      getSingletonClass in interface IRubyObject
      Returns:
      the Ruby singleton class
    • singletonClass

      public RubyClass singletonClass(ThreadContext context)
      Will either return the existing singleton class for this object, or create a new one and return that. For a few types a singleton class is not possible so it will throw an error.
      Specified by:
      singletonClass in interface IRubyObject
      Parameters:
      context - the current thread context
      Returns:
      the singleton of this type
    • makeMetaClass

      @Deprecated(since="10.0") public RubyClass makeMetaClass(RubyClass superClass)
      Deprecated.
    • makeMetaClass

      public RubyClass makeMetaClass(ThreadContext context, RubyClass superClass)
      rb_make_metaclass Will create a new meta class, insert this in the chain of classes for this specific object, and return the generated meta class.
      Parameters:
      context - the thread context
      superClass - the super class
      Returns:
      the new meta class
    • makeMetaClassBootstrap

      public RubyClass makeMetaClassBootstrap(Ruby runtime, RubyClass superClass, RubyClass Class)
      This will create a new metaclass. This is only used during bootstrapping before the initial ThreadContext is defined. Normal needs of making a metaclass should use makeMetaClass(ThreadContext, RubyClass)
      Parameters:
      runtime - the runtime
      superClass - of the metaclass
      Class - a reference to Ruby Class
      Returns:
      the new metaclass
    • setMetaClass

      public void setMetaClass(RubyClass metaClass)
      Makes it possible to change the metaclass of an object. In practice, this is a simple version of Smalltalks Become, except that it doesn't work when we're dealing with subclasses. In practice it's used to change the singleton/meta class used, without changing the "real" inheritance chain.
      Parameters:
      metaClass - the meta class to set
    • getType

      public final RubyClass getType()
      Description copied from interface: IRubyObject
      RubyMethod getType.
      Specified by:
      getType in interface IRubyObject
      Returns:
      RubyClass
      See Also:
    • respondsTo

      public final boolean respondsTo(String name)
      Does this object respond to the specified message? Uses a shortcut if it can be proved that respond_to? and respond_to_missing? haven't been overridden.
      Specified by:
      respondsTo in interface IRubyObject
      Parameters:
      name - method name
      Returns:
      boolean
    • respondsToMissing

      public final boolean respondsToMissing(String name)
      Does this object respond to the specified message via "method_missing?"
      Specified by:
      respondsToMissing in interface IRubyObject
      Parameters:
      name - method name
      Returns:
      boolean
    • respondsToMissing

      public final boolean respondsToMissing(String name, boolean incPrivate)
      Does this object respond to the specified message via "method_missing?"
      Specified by:
      respondsToMissing in interface IRubyObject
      Parameters:
      name - method name
      incPrivate - private?
      Returns:
      boolean
    • getRuntime

      public final Ruby getRuntime()
      Will return the runtime that this object is associated with.
      Specified by:
      getRuntime in interface IRubyObject
      Returns:
      current runtime
    • getCurrentContext

      @Deprecated public final ThreadContext getCurrentContext()
      Deprecated.
    • getJavaClass

      public Class<?> getJavaClass()
      Will return the Java interface that most closely can represent this object, when working through Java integration translations.
      Specified by:
      getJavaClass in interface IRubyObject
      Returns:
      the true Java class of this (Ruby) object
    • asJavaString

      public String asJavaString()
      rb_to_id Will try to convert this object to a String using the Ruby "to_str" if the object isn't already a String. If this still doesn't work, will throw a Ruby TypeError.
      Specified by:
      asJavaString in interface IRubyObject
      Returns:
      a (Java) string
    • asString

      public RubyString asString()
      rb_obj_as_string First converts this object into a String using the "to_s" method and returns it. If to_s doesn't return a Ruby String, anyToString() is used instead.
      Specified by:
      asString in interface IRubyObject
      Returns:
      string representation
    • convertToArray

      public RubyArray convertToArray()
      Tries to convert this object to a Ruby Array using the "to_ary" method.
      Specified by:
      convertToArray in interface IRubyObject
      Returns:
      array representation of this
    • convertToHash

      public RubyHash convertToHash()
      Tries to convert this object to a Ruby Hash using the "to_hash" method.
      Specified by:
      convertToHash in interface IRubyObject
      Returns:
      hash representation of this
    • convertToFloat

      public RubyFloat convertToFloat()
      Tries to convert this object to a Ruby Float using the "to_f" method.
      Specified by:
      convertToFloat in interface IRubyObject
      Returns:
      float representation of this
    • convertToInteger

      public RubyInteger convertToInteger()
      Tries to convert this object to a Ruby Integer using the "to_int" method.
      Specified by:
      convertToInteger in interface IRubyObject
      Returns:
      an integer representation of this
    • convertToInteger

      public RubyInteger convertToInteger(String convertMethod)
      Tries to convert this object to a Ruby Integer using the supplied conversion method.
      Specified by:
      convertToInteger in interface IRubyObject
      Parameters:
      convertMethod - conversion method to use e.g. "to_i"
      Returns:
      an integer representation of this
    • convertToString

      public RubyString convertToString()
      Tries to convert this object to a Ruby String using the "to_str" method.
      Specified by:
      convertToString in interface IRubyObject
      Returns:
      a string representation of this
    • anyToString

      public IRubyObject anyToString()
      Internal method that helps to convert any object into the format of a class name and a hex string inside of #<>.
      Specified by:
      anyToString in interface IRubyObject
      Returns:
      a string value
    • decode

      public RubyString decode(String id)
      raw (id) strings are not properly encoded but in an iso_8859_1 form. This method will lookup properly encoded string from the symbol table.
      Parameters:
      id - the id of the string
      Returns:
      the string of the symbol found from id
    • checkStringType

      public IRubyObject checkStringType()
      rb_check_string_type Tries to return a coerced string representation of this object, using "to_str". If that returns something other than a String or nil, an empty String will be returned.
      Specified by:
      checkStringType in interface IRubyObject
      Returns:
      nil if type check failed
    • checkArrayType

      public IRubyObject checkArrayType()
      rb_check_array_type Returns the result of trying to convert this object to an Array with "to_ary".
      Specified by:
      checkArrayType in interface IRubyObject
      Returns:
      nil if type check failed
    • toJava

      public <T> T toJava(Class<T> target)
      Description copied from interface: IRubyObject
      Convert the object to the specified Java class, if possible.
      Specified by:
      toJava in interface IRubyObject
      Type Parameters:
      T - type
      Parameters:
      target - The target type to which the object should be converted.
      Returns:
      java type
      See Also:
    • dup

      public IRubyObject dup()
      Description copied from interface: IRubyObject
      RubyMethod dup.
      Specified by:
      dup in interface IRubyObject
      Returns:
      a dup-ed object
    • OBJ_INIT_COPY

      protected static boolean OBJ_INIT_COPY(IRubyObject obj, IRubyObject orig)
    • objInitCopy

      protected static void objInitCopy(IRubyObject obj, IRubyObject orig)
    • copySpecialInstanceVariables

      public void copySpecialInstanceVariables(IRubyObject clone)
      Lots of MRI objects keep their state in non-lookupable ivars (e:g. Range, Struct, etc). This method is responsible for dupping our java field equivalents
      Specified by:
      copySpecialInstanceVariables in interface IRubyObject
    • rbClone

      public IRubyObject rbClone()
      Description copied from interface: IRubyObject
      RubyMethod clone.
      Specified by:
      rbClone in interface IRubyObject
      Returns:
      a cloned object
    • rbClone

      public IRubyObject rbClone(ThreadContext context, IRubyObject maybeOpts)
    • dupSetup

      protected RubyBasicObject dupSetup(ThreadContext context, RubyBasicObject dup)
    • cloneSetup

      protected RubyBasicObject cloneSetup(ThreadContext context, RubyBasicObject clone, IRubyObject freeze)
    • getSingletonClassClone

      @Deprecated(since="10.0") protected RubyClass getSingletonClassClone()
      Deprecated.
    • getSingletonClassCloneAndAttach

      @Deprecated(since="10.0") protected RubyClass getSingletonClassCloneAndAttach(RubyBasicObject attach)
      Deprecated.
    • getSingletonClassCloneAndAttach

      protected RubyClass getSingletonClassCloneAndAttach(ThreadContext context, RubyBasicObject attach)
      rb_singleton_class_clone Will make sure that if the current objects class is a singleton, it will get cloned.
      Parameters:
      context - the thread context
      attach - object ot attach
      Returns:
      either a real class, or a clone of the current singleton class
    • isModule

      public boolean isModule()
      Specifically polymorphic method that are meant to be overridden by modules to specify that they are modules in an easy way.
      Specified by:
      isModule in interface IRubyObject
      Returns:
      true if an object is Ruby Module instance (note that it will return false for Ruby Classes).
    • isClass

      public boolean isClass()
      Specifically polymorphic method that are meant to be overridden by classes to specify that they are classes in an easy way.
      Specified by:
      isClass in interface IRubyObject
      Returns:
      true if an object is Ruby Class instance (note that it will return false for Ruby singleton classes).
    • dataWrapStruct

      public void dataWrapStruct(Object obj)
      Description copied from interface: IRubyObject
      Our version of Data_Wrap_Struct. This method will just set a private pointer to the object provided. This pointer is transient and will not be accessible from Ruby.
      Specified by:
      dataWrapStruct in interface IRubyObject
      Parameters:
      obj - the object to wrap
      See Also:
    • dataGetStruct

      public Object dataGetStruct()
      Description copied from interface: IRubyObject
      Our version of Data_Get_Struct. Returns a wrapped data value if there is one, otherwise returns null.
      Specified by:
      dataGetStruct in interface IRubyObject
      Returns:
      the object wrapped.
      See Also:
    • id

      public IRubyObject id()
      rb_obj_id Return the internal id of an object.
      Specified by:
      id in interface IRubyObject
      Returns:
      the object id
    • getObjectId

      protected long getObjectId()
      The logic here is to use the special objectId accessor slot from the parent as a lazy store for an object symbol. IDs are generated atomically, in serial, and guaranteed unique for up to 2^63 objects. The special objectId slot is managed separately from the "normal" vars so it does not marshal, clone/dup, or refuse to be initially set when the object is frozen.
      Returns:
      object id
    • inspect

      @Deprecated(since="10.0") public IRubyObject inspect()
      Deprecated.
      Description copied from interface: IRubyObject
      RubyMethod inspect.
      Specified by:
      inspect in interface IRubyObject
      Returns:
      String
    • inspect

      public IRubyObject inspect(ThreadContext context)
      Returns a string containing a human-readable representation of obj. If not overridden, uses the to_s method to generate the string. [ 1, 2, 3..4, 'five' ].inspect #=> "[1, 2, 3..4, \"five\"]" Time.new.inspect #=> "Wed Apr 09 08:54:39 CDT 2003"
      Specified by:
      inspect in interface IRubyObject
    • hashyInspect

      public final IRubyObject hashyInspect()
    • rbInspect

      public static IRubyObject rbInspect(ThreadContext context, IRubyObject obj)
    • inspectHashCode

      protected int inspectHashCode()
      For most objects, the hash used in the default #inspect is just the identity hashcode of the actual object. See org.jruby.java.proxies.JavaProxy for a divergent case.
      Returns:
      The identity hashcode of this object
    • op_not

      public IRubyObject op_not(ThreadContext context)
    • op_not_equal

      public IRubyObject op_not_equal(ThreadContext context, IRubyObject other)
      The != method implemented for BasicObject.
      Parameters:
      context - thread context
      other - other object
      Returns:
      false if this == other, true otherwise
    • compareTo

      public int compareTo(IRubyObject other)
      Compares this Ruby object with another.
      Specified by:
      compareTo in interface Comparable<IRubyObject>
      Parameters:
      other - another IRubyObject
      Returns:
      0 if equal, < 0 if this is less than other, > 0 if this is greater than other
    • op_equal

      public IRubyObject op_equal(ThreadContext context, IRubyObject obj)
      rb_obj_equal Will by default use identity equality to compare objects. This follows the Ruby semantics. The name of this method doesn't follow the convention because hierarchy problems
      Specified by:
      op_equal in interface IRubyObject
    • op_eqq

      public IRubyObject op_eqq(ThreadContext context, IRubyObject other)
      Specified by:
      op_eqq in interface IRubyObject
    • equalInternal

      protected static boolean equalInternal(ThreadContext context, IRubyObject that, IRubyObject other)
      Helper method for checking equality, first using Java identity equality, and then calling the "==" method.
      Parameters:
      context - the thread context
      that - first comparator
      other - the second comparator
      Returns:
      are they equal
    • eqlInternal

      protected static boolean eqlInternal(ThreadContext context, IRubyObject that, IRubyObject other)
      Helper method for checking equality, first using Java identity equality, and then calling the "eql?" method.
      Parameters:
      context - the thread context
      that - first comparator
      other - the second comparator
      Returns:
      are they equal
    • eql

      public boolean eql(IRubyObject other)
      method used for Hash key comparison (specialized for String, Symbol and Fixnum)
      Specified by:
      eql in interface IRubyObject
      Returns:
      Will by default just call the Ruby method "eql?"
    • addFinalizer

      @Deprecated public void addFinalizer(IRubyObject f)
      Deprecated.
      Specified by:
      addFinalizer in interface IRubyObject
    • addFinalizer

      public IRubyObject addFinalizer(ThreadContext context, IRubyObject f)
      Adds the specified object as a finalizer for this object.
      Specified by:
      addFinalizer in interface IRubyObject
    • dupFinalizer

      protected void dupFinalizer()
      Stange method. We will dup the __finalizer__ variable in a freshly dup'd object, but it needs to be set to this objects __finalizer__.
    • removeFinalizers

      public void removeFinalizers()
      Remove all the finalizers for this object.
      Specified by:
      removeFinalizers in interface IRubyObject
    • getVariable

      public Object getVariable(int index)
      Specified by:
      getVariable in interface IRubyObject
    • setVariable

      public void setVariable(int index, Object value)
      Specified by:
      setVariable in interface IRubyObject
    • getFFIHandle

      public final Object getFFIHandle()
    • setFFIHandle

      public final void setFFIHandle(Object value)
    • hasVariables

      public boolean hasVariables()
      Returns true if object has any variables
      Specified by:
      hasVariables in interface IRubyObject
      Returns:
      true if object has any variables, else false
      See Also:
    • hasInstanceVariables

      protected boolean hasInstanceVariables()
      Check whether this object has any *set* instance variables unrelated to object_id, FFI, and ObjectSpace (which also use hidden ivar slots).
      Returns:
      true if there are set instance variables, false otherwise
    • getVariableList

      public List<Variable<Object>> getVariableList()
      Gets a list of all variables in this object.
      Specified by:
      getVariableList in interface IRubyObject
      Returns:
      a list of all variables (ivar/internal)
    • getMarshalVariableList

      public List<Variable<Object>> getMarshalVariableList()
      Description copied from interface: IRubyObject
      all marshable values
      Specified by:
      getMarshalVariableList in interface IRubyObject
      Returns:
      a mutable list of all marshalable variables (ivar/internal)
      See Also:
    • getVariableNameList

      public List<String> getVariableNameList()
      Gets a name list of all variables in this object.
      Specified by:
      getVariableNameList in interface IRubyObject
      Returns:
      a list of all variable names (ivar/cvar/constant/internal)
    • variableTableContains

      protected boolean variableTableContains(String name)
      Checks if the variable table contains a variable of the specified name.
      Parameters:
      name - to lookup
      Returns:
      if contained in this object
    • variableTableFetch

      protected Object variableTableFetch(String name)
      Fetch an object from the variable table based on the name.
      Parameters:
      name - to lookup
      Returns:
      the object or null if not found
    • variableTableStore

      protected Object variableTableStore(String name, Object value)
      Store a value in the variable store under the specific name.
      Parameters:
      name - to store in
      value - to store
      Returns:
      value
    • variableTableRemove

      protected Object variableTableRemove(String name)
      Removes the entry with the specified name from the variable table, and returning the removed value.
      Parameters:
      name - to remove
      Returns:
      the value removed
    • variableTableSync

      protected void variableTableSync(List<Variable<Object>> vars)
      Synchronize the variable table with the argument. In real terms this means copy all entries into a newly allocated table.
      Parameters:
      vars - to to sync with
    • getInternalVariables

      public InternalVariables getInternalVariables()
      Dummy method to avoid a cast, and to avoid polluting the IRubyObject interface with all the instance variable management methods.
      Specified by:
      getInternalVariables in interface IRubyObject
    • hasInternalVariable

      public boolean hasInternalVariable(String name)
      Description copied from interface: InternalVariables
      Returns true if object has the named internal variable. Use only for internal variables (not ivar/cvar/constant).
      Specified by:
      hasInternalVariable in interface InternalVariables
      Parameters:
      name - the name of an internal variable
      Returns:
      true if object has the named internal variable.
      See Also:
    • getInternalVariable

      public Object getInternalVariable(String name)
      Description copied from interface: InternalVariables
      Returns the named internal variable if present, else null. Use only for internal variables (not ivar/cvar/constant).
      Specified by:
      getInternalVariable in interface InternalVariables
      Parameters:
      name - the name of an internal variable
      Returns:
      the named internal variable if present, else null
      See Also:
    • setInternalVariable

      public void setInternalVariable(String name, Object value)
      Description copied from interface: InternalVariables
      Sets the named internal variable to the specified value. Use only for internal variables (not ivar/cvar/constant).
      Specified by:
      setInternalVariable in interface InternalVariables
      Parameters:
      name - the name of an internal variable
      value - the value to be set
      See Also:
    • removeInternalVariable

      public Object removeInternalVariable(String name)
      Description copied from interface: InternalVariables
      Removes the named internal variable, if present, returning its value. Use only for internal variables (not ivar/cvar/constant).
      Specified by:
      removeInternalVariable in interface InternalVariables
      Parameters:
      name - the name of the variable to remove
      Returns:
      the value of the remove variable, if present; else null
      See Also:
    • syncVariables

      public void syncVariables(IRubyObject other)
      Sync one this object's variables with other's - this is used to make rbClone work correctly.
      Specified by:
      syncVariables in interface IRubyObject
      Parameters:
      other - the source object containing the variables to sync
    • getInstanceVariables

      public InstanceVariables getInstanceVariables()
      Dummy method to avoid a cast, and to avoid polluting the IRubyObject interface with all the instance variable management methods.
      Specified by:
      getInstanceVariables in interface IRubyObject
    • hasInstanceVariable

      public boolean hasInstanceVariable(String name)
      Description copied from interface: InstanceVariables
      Returns true if object has the named instance variable.
      Specified by:
      hasInstanceVariable in interface InstanceVariables
      Parameters:
      name - the name of an instance variable
      Returns:
      true if object has the named instance variable.
      See Also:
    • getInstanceVariable

      public IRubyObject getInstanceVariable(String name)
      Description copied from interface: InstanceVariables
      Returns the named instance variable if present, else null.
      Specified by:
      getInstanceVariable in interface InstanceVariables
      Parameters:
      name - the name of an instance variable
      Returns:
      the named instance variable if present, else null
      See Also:
    • setInstanceVariable

      public IRubyObject setInstanceVariable(String name, IRubyObject value)
      rb_iv_set / rb_ivar_set
      Specified by:
      setInstanceVariable in interface InstanceVariables
      Parameters:
      name - the name of an instance variable
      value - the value to be set
      Returns:
      value
      See Also:
    • removeInstanceVariable

      public IRubyObject removeInstanceVariable(String name)
      Description copied from interface: InstanceVariables
      Removes the named instance variable, if present, returning its value.
      Specified by:
      removeInstanceVariable in interface InstanceVariables
      Parameters:
      name - the name of the variable to remove
      Returns:
      the value of the remove variable, if present; else null
      See Also:
    • getInstanceVariableList

      public List<Variable<IRubyObject>> getInstanceVariableList()
      Gets a list of all variables in this object.
      Specified by:
      getInstanceVariableList in interface InstanceVariables
      Returns:
      instance variables
    • getInstanceVariableNameList

      public List<String> getInstanceVariableNameList()
      Gets a name list of all variables in this object.
      Specified by:
      getInstanceVariableNameList in interface InstanceVariables
      Returns:
      instance variable names
    • forEachInstanceVariableName

      public void forEachInstanceVariableName(Consumer<String> consumer)
      Description copied from interface: InstanceVariables
      Iterate over all instance variable names for this object.
      Specified by:
      forEachInstanceVariableName in interface InstanceVariables
      Parameters:
      consumer - consumer for the names
    • copyInstanceVariablesInto

      public void copyInstanceVariablesInto(InstanceVariables other)
      Description copied from interface: InstanceVariables
      Copies all instance variables from the given object into the receiver
      Specified by:
      copyInstanceVariablesInto in interface InstanceVariables
      Parameters:
      other - the thing to copy into
    • ensureInstanceVariablesSettable

      public void ensureInstanceVariablesSettable()
      Makes sure that instance variables can be set on this object, including information about whether this object is frozen. Will throw a suitable exception in that case.
    • forEachInstanceVariable

      public void forEachInstanceVariable(BiConsumer<String,IRubyObject> accessor)
      Description copied from interface: InstanceVariables
      Iterate over all instance variable name/value pairs for this object.
      Specified by:
      forEachInstanceVariable in interface InstanceVariables
      Parameters:
      accessor - a consumer for each variable
    • getNativeTypeIndex

      @Deprecated public final int getNativeTypeIndex()
      Deprecated.
      Description copied from interface: CoreObjectType
      Return the ClassIndex value for the native type this object was constructed from. Particularly useful for determining marshalling format. All instances of subclasses of Hash, for example are of Java type RubyHash, and so should utilize RubyHash marshalling logic in addition to user-defined class marshalling logic.
      Specified by:
      getNativeTypeIndex in interface CoreObjectType
      Returns:
      the ClassIndex of the native type this object was constructed from
    • getNativeClassIndex

      public ClassIndex getNativeClassIndex()
      Description copied from interface: CoreObjectType
      Return the ClassIndex for the native type this object was constructed from.
      Specified by:
      getNativeClassIndex in interface CoreObjectType
      Returns:
      the ClassIndex of the native type this object was constructed from
    • isBuiltin

      public boolean isBuiltin(String methodName)
      A method to determine whether the method named by methodName is a builtin method, i.e. a method built-in to JRuby and loaded during its core boot process.
      Parameters:
      methodName - to look for.
      Returns:
      true if so
    • singleton_method_added

      public static IRubyObject singleton_method_added(ThreadContext context, IRubyObject recv, IRubyObject symbolId, Block block)
    • singleton_method_removed

      public static IRubyObject singleton_method_removed(ThreadContext context, IRubyObject recv, IRubyObject symbolId, Block block)
    • singleton_method_undefined

      public static IRubyObject singleton_method_undefined(ThreadContext context, IRubyObject recv, IRubyObject symbolId, Block block)
    • method_missing

      public static IRubyObject method_missing(ThreadContext context, IRubyObject recv, IRubyObject[] args, Block block)
    • send

      @Deprecated public IRubyObject send(ThreadContext context, Block block)
      Deprecated.
    • send

      public IRubyObject send(ThreadContext context, IRubyObject arg0, Block block)
    • send

      public IRubyObject send(ThreadContext context, IRubyObject arg0, IRubyObject arg1, Block block)
    • send

      public IRubyObject send(ThreadContext context, IRubyObject arg0, IRubyObject arg1, IRubyObject arg2, Block block)
    • send

      public IRubyObject send(ThreadContext context, IRubyObject[] args, Block block)
    • yieldUnder

      protected IRubyObject yieldUnder(ThreadContext context, RubyModule under, IRubyObject[] args, Block block, EvalType evalType)
      Will yield to the specific block changing the self to be the current object instead of the self that is part of the frame saved in the block frame. This method is the basis for the Ruby instance_eval and module_eval methods. The arguments sent in to it in the args array will be yielded to the block. This makes it possible to emulate both instance_eval and instance_exec with this implementation.
      Parameters:
      context - the thread context
      under - module to yield in
      args - to use
      block - to call
      evalType - type of evaal to perform
      Returns:
      the result
    • yieldUnder

      protected IRubyObject yieldUnder(ThreadContext context, RubyModule under, Block block, EvalType evalType)
      Will yield to the specific block changing the self to be the current object instead of the self that is part of the frame saved in the block frame. This method is the basis for the Ruby instance_eval and module_eval methods. The arguments sent in to it in the args array will be yielded to the block. This makes it possible to emulate both instance_eval and instance_exec with this implementation.
      Parameters:
      context - the thread context
      under - module to yield in
      block - to call
      evalType - type of evaal to perform
      Returns:
      the result
    • specificEval

      public IRubyObject specificEval(ThreadContext context, RubyModule mod, Block block, EvalType evalType)
      specific_eval Evaluates the block or string inside of the context of this object, using the supplied arguments. If a block is given, this will be yielded in the specific context of this object. If no block is given then a String-like object needs to be the first argument, and this string will be evaluated. Second and third arguments in the args-array is optional, but can contain the filename and line of the string under evaluation.
      Parameters:
      context - the thread context
      mod - module to yield in
      block - to call
      evalType - type of evaal to perform
      Returns:
      the result
    • specificEval

      public IRubyObject specificEval(ThreadContext context, RubyModule mod, IRubyObject arg, Block block, EvalType evalType)
      specific_eval Evaluates the block or string inside of the context of this object, using the supplied arguments. If a block is given, this will be yielded in the specific context of this object. If no block is given then a String-like object needs to be the first argument, and this string will be evaluated. Second and third arguments in the args-array is optional, but can contain the filename and line of the string under evaluation.
      Parameters:
      context - the thread context
      mod - module to yield in
      arg - to pass to block
      block - to call
      evalType - type of evaal to perform
      Returns:
      the result
    • specificEval

      public IRubyObject specificEval(ThreadContext context, RubyModule mod, IRubyObject arg0, IRubyObject arg1, Block block, EvalType evalType)
      specific_eval Evaluates the block or string inside of the context of this object, using the supplied arguments. If a block is given, this will be yielded in the specific context of this object. If no block is given then a String-like object needs to be the first argument, and this string will be evaluated. Second and third arguments in the args-array is optional, but can contain the filename and line of the string under evaluation.
      Parameters:
      context - the thread context
      mod - module to yield in
      arg0 - to pass to block
      arg1 - to pass to block
      block - to call
      evalType - type of evaal to perform
      Returns:
      the result
    • specificEval

      public IRubyObject specificEval(ThreadContext context, RubyModule mod, IRubyObject arg0, IRubyObject arg1, IRubyObject arg2, Block block, EvalType evalType)
      specific_eval Evaluates the block or string inside of the context of this object, using the supplied arguments. If a block is given, this will be yielded in the specific context of this object. If no block is given then a String-like object needs to be the first argument, and this string will be evaluated. Second and third arguments in the args-array is optional, but can contain the filename and line of the string under evaluation.
      Parameters:
      context - the thread context
      mod - module to yield in
      arg0 - to pass to block
      arg1 - to pass to block
      arg2 - to pass to block
      block - to call
      evalType - type of evaal to perform
      Returns:
      the result
    • getInstanceEvalClass

      @Deprecated(since="10.0") protected RubyModule getInstanceEvalClass()
      Deprecated.
    • getInstanceEvalClass

      protected RubyModule getInstanceEvalClass(ThreadContext context)
    • evalUnder

      public IRubyObject evalUnder(ThreadContext context, RubyModule under, RubyString src, String file, int line, EvalType evalType)
    • equal_p

      public IRubyObject equal_p(ThreadContext context, IRubyObject other)
      rb_obj_equal Will use Java identity equality.
      Parameters:
      context - the thread context
      other - to compare with
      Returns:
      are they equal?
    • eql_p

      @Deprecated(since="10.0") public IRubyObject eql_p(IRubyObject obj)
      Deprecated.
    • eql_p

      public IRubyObject eql_p(ThreadContext context, IRubyObject obj)
    • op_cmp

      public IRubyObject op_cmp(ThreadContext context, IRubyObject other)
    • initialize_copy

      @Deprecated(since="10.0") public IRubyObject initialize_copy(IRubyObject original)
      Parameters:
      original - object
      Returns:
      a copy
    • initialize_copy

      public IRubyObject initialize_copy(ThreadContext context, IRubyObject original)
      Initializes this object as a copy of the original, that is the parameter to this object. Will make sure that the argument actually has the same real class as this object. It shouldn't be possible to initialize an object with something totally different.
      Parameters:
      context - the thread context
      original - the original
      Returns:
      a copy unless the same thing
    • checkFrozen

      public void checkFrozen()
      The actual method that checks frozen with the default frozen message from MRI. If possible, call this instead of testFrozen(java.lang.String).
    • respond_to_p

      @Deprecated public final RubyBoolean respond_to_p(IRubyObject mname)
      Deprecated.
    • respond_to_p

      @Deprecated public final RubyBoolean respond_to_p(IRubyObject mname, IRubyObject includePrivate)
      Deprecated.
    • hash

      @Deprecated(since="10.0") public RubyFixnum hash()
      Deprecated.
      Use hash(ThreadContext) instead.
      Will return the hash code of this object. In comparison to MRI, this method will use the Java identity hash code instead of using rb_obj_id, since the usage of id in JRuby will incur the cost of some. ObjectSpace maintenance.
      Returns:
      hash value
    • hash

      public RubyFixnum hash(ThreadContext context)
      Will return the hash code of this object. In comparison to MRI, this method will use the Java identity hash code instead of using rb_obj_id, since the usage of id in JRuby will incur the cost of some. ObjectSpace maintenance.
      Parameters:
      context - the current thread context
      Returns:
      the hash value
    • type

      public RubyClass type()
      rb_obj_class Returns the real class of this object, excluding any singleton/meta class in the inheritance chain.
      Returns:
      the real class
    • display

      public IRubyObject display(ThreadContext context, IRubyObject[] args)
    • freeze

      public IRubyObject freeze(ThreadContext context)
    • frozen_p

      public RubyBoolean frozen_p(ThreadContext context)
    • instance_of_p

      public RubyBoolean instance_of_p(ThreadContext context, IRubyObject type)
      rb_obj_is_instance_of call-seq: obj.instance_of?(class) => true or false Returns true if obj is an instance of the given class. See also Object#kind_of?.
      Parameters:
      context - the thread context
      type - the type
      Returns:
      true if this is instance of type
    • kind_of_p

      public RubyBoolean kind_of_p(ThreadContext context, IRubyObject type)
      rb_obj_is_kind_of call-seq: obj.is_a?(class) => true or false obj.kind_of?(class) => true or false Returns true if class is the class of obj, or if class is one of the superclasses of obj or modules included in obj. module M; end class A include M end class B < A; end class C < B; end b = B.new b.instance_of? A #=> false b.instance_of? B #=> true b.instance_of? C #=> false b.instance_of? M #=> false b.kind_of? A #=> true b.kind_of? B #=> true b.kind_of? C #=> false b.kind_of? M #=> true
      Parameters:
      context - the thread context
      type - the type
      Returns:
      true if this is kind of type
    • methods

      public IRubyObject methods(ThreadContext context, IRubyObject... args)
      rb_obj_methods call-seq: obj.methods => array Returns a list of the names of methods publicly accessible in obj. This will include all the methods accessible in obj's ancestors. class Klass def kMethod() end end k = Klass.new k.methods[0..9] #=> ["kMethod", "freeze", "nil?", "is_a?", "class", "instance_variable_set", "methods", "extend", "__send__", "instance_eval"] k.methods.length #=> 42
      Parameters:
      context - the thread context
      args - include ancestors
      Returns:
      methods
    • methods

      @Deprecated public final IRubyObject methods(ThreadContext context, IRubyObject[] args, boolean useSymbols)
      Deprecated.
    • public_methods

      public IRubyObject public_methods(ThreadContext context, IRubyObject[] args)
    • protected_methods

      public IRubyObject protected_methods(ThreadContext context, IRubyObject[] args)
    • private_methods

      public IRubyObject private_methods(ThreadContext context, IRubyObject[] args)
    • singleton_methods

      public RubyArray singleton_methods(ThreadContext context, IRubyObject[] args)
    • singleton_method

      @Deprecated(since="10.0") public IRubyObject singleton_method(IRubyObject name)
      Deprecated.
    • singleton_method

      public IRubyObject singleton_method(ThreadContext context, IRubyObject name)
    • method

      @Deprecated(since="10.0") public IRubyObject method(IRubyObject name)
      Deprecated.
    • method

      @Deprecated(since="10.0") public IRubyObject method(IRubyObject name, StaticScope refinedScope)
      Deprecated.
    • method

      public IRubyObject method(ThreadContext context, IRubyObject name, StaticScope refinedScope)
      Like method(IRubyObject) but using the given refinement scope to search for the method.
      Parameters:
      context - the thread context
      name - the name of the method
      refinedScope - the static scope for the caller method
      Returns:
      method instance
    • to_s

      @Deprecated(since="10.0") public IRubyObject to_s()
      Deprecated.
      Use to_s(ThreadContext) instead.
      Returns:
      ""
    • to_s

      public IRubyObject to_s(ThreadContext context)
    • to_a

      public RubyArray to_a(ThreadContext context)
    • instance_eval

      public IRubyObject instance_eval(ThreadContext context, Block block)
    • instance_eval

      public IRubyObject instance_eval(ThreadContext context, IRubyObject arg0, Block block)
    • instance_eval

      public IRubyObject instance_eval(ThreadContext context, IRubyObject arg0, IRubyObject arg1, Block block)
    • instance_eval

      public IRubyObject instance_eval(ThreadContext context, IRubyObject arg0, IRubyObject arg1, IRubyObject arg2, Block block)
    • instance_eval

      public IRubyObject instance_eval(ThreadContext context, IRubyObject[] args, Block block)
    • instance_exec

      public IRubyObject instance_exec(ThreadContext context, IRubyObject[] args, Block block)
      rb_obj_instance_exec call-seq: obj.instance_exec(arg...) {|var...| block } => obj Executes the given block within the context of the receiver (_obj_). In order to set the context, the variable +self+ is set to _obj_ while the code is executing, giving the code access to _obj_'s instance variables. Arguments are passed as block parameters. class Klass def initialize @secret = 99 end end k = Klass.new k.instance_exec(5) {|x| @secret+x } #=> 104
      Parameters:
      context - the thread context
      args - the args
      block - block
      Returns:
      the result
    • extend

      public IRubyObject extend(IRubyObject[] args)
      rb_obj_extend call-seq: obj.extend(module, ...) => obj Adds to _obj_ the instance methods from each module given as a parameter. module Mod def hello "Hello from Mod.\n" end end class Klass def hello "Hello from Klass.\n" end end k = Klass.new k.hello #=> "Hello from Klass.\n" k.extend(Mod) #=> #<Klass:0x401b3bc8> k.hello #=> "Hello from Mod.\n"
      Parameters:
      args - to use as modules to extend
      Returns:
      itself
    • nil_p

      public IRubyObject nil_p(ThreadContext context)
      rb_false call_seq: nil.nil? => true <anything_else>.nil? => false Only the object nil responds true to nil?.
      Parameters:
      context - the thread context
      Returns:
      true if nil
    • op_match

      public IRubyObject op_match(ThreadContext context, IRubyObject arg)
      rb_obj_pattern_match call-seq: obj =~ other => nil Pattern Match---Overridden by descendents (notably Regexp and String) to provide meaningful pattern-match semantics.
      Parameters:
      context - the thread context
      arg - arg
      Returns:
      true if matches (always nil)
    • op_not_match

      public IRubyObject op_not_match(ThreadContext context, IRubyObject arg)
      Invert the match operator.
      Parameters:
      context - the thread context
      arg - arg
      Returns:
      true if they do not match
    • instance_variable_defined_p

      public IRubyObject instance_variable_defined_p(ThreadContext context, IRubyObject name)
      rb_obj_ivar_defined call-seq: obj.instance_variable_defined?(symbol) => true or false Returns true if the given instance variable is defined in obj. class Fred def initialize(p1, p2) @a, @b = p1, p2 end end fred = Fred.new('cat', 99) fred.instance_variable_defined?(:@a) #=> true fred.instance_variable_defined?("@b") #=> true fred.instance_variable_defined?("@c") #=> false
      Parameters:
      context - the thread context
      name - of ivar
      Returns:
      true if defined
    • instance_variable_get

      public IRubyObject instance_variable_get(ThreadContext context, IRubyObject name)
      rb_obj_ivar_get call-seq: obj.instance_variable_get(symbol) => obj Returns the value of the given instance variable, or nil if the instance variable is not set. The @ part of the variable name should be included for regular instance variables. Throws a NameError exception if the supplied symbol is not valid as an instance variable name. class Fred def initialize(p1, p2) @a, @b = p1, p2 end end fred = Fred.new('cat', 99) fred.instance_variable_get(:@a) #=> "cat" fred.instance_variable_get("@b") #=> 99
      Parameters:
      context - the thread context
      name - of ivar
      Returns:
      value of ivar
    • instance_variable_set

      public IRubyObject instance_variable_set(IRubyObject name, IRubyObject value)
      rb_obj_ivar_set call-seq: obj.instance_variable_set(symbol, obj) => obj Sets the instance variable names by symbol to object, thereby frustrating the efforts of the class's author to attempt to provide proper encapsulation. The variable did not have to exist prior to this call. class Fred def initialize(p1, p2) @a, @b = p1, p2 end end fred = Fred.new('cat', 99) fred.instance_variable_set(:@a, 'dog') #=> "dog" fred.instance_variable_set(:@c, 'cat') #=> "cat" fred.inspect #=> "#<Fred:0x401b3da8 @a=\"dog\", @b=99, @c=\"cat\">"
      Parameters:
      name - of ivar
      value - to set
      Returns:
      value of old set ivar
    • remove_instance_variable

      public IRubyObject remove_instance_variable(ThreadContext context, IRubyObject name, Block block)
      rb_obj_remove_instance_variable call-seq: obj.remove_instance_variable(symbol) => obj Removes the named instance variable from obj, returning that variable's value. class Dummy attr_reader :var def initialize @var = 99 end def remove remove_instance_variable(:@var) end end d = Dummy.new d.var #=> 99 d.remove #=> 99 d.var #=> nil
      Parameters:
      context - the thread context
      name - of ivar
      block - the block (not used)
      Returns:
      value of removed ivar
    • instance_variables

      public RubyArray instance_variables(ThreadContext context)
      rb_obj_instance_variables call-seq: obj.instance_variables => array Returns an array of instance variable names for the receiver. Note that simply defining an accessor does not create the corresponding instance variable. class Fred attr_accessor :a1 def initialize @iv = 3 end end Fred.new.instance_variables #=> [:"@iv"]
      Parameters:
      context - the thread context
      Returns:
      list of ivars
    • equals

      public boolean equals(Object other)
      This method is just a wrapper around the Ruby "==" method, provided so that RubyObjects can be used as keys in the Java HashMap object underlying RubyHash.
      Overrides:
      equals in class Object
      Parameters:
      other - object to compare
      Returns:
      true if equals
    • hashCode

      public int hashCode()
      Override the Object#hashCode method to make sure that the Ruby hash is actually used as the hashcode for Ruby objects. If the Ruby "hash" method doesn't return a number, the Object#hashCode implementation will be used instead.
      Overrides:
      hashCode in class Object
    • nonFixnumHashCode

      @Deprecated(since="10.0") protected static int nonFixnumHashCode(IRubyObject hashValue)
      Deprecated.
    • nonFixnumHashCode

      protected static int nonFixnumHashCode(ThreadContext context, IRubyObject hashValue)
    • validateInstanceVariable

      @Deprecated protected String validateInstanceVariable(String name)
      Deprecated.
      Checks if the name parameter represents a legal instance variable name, and otherwise throws a Ruby NameError
      Parameters:
      name - of instance variable
      Returns:
      name it is valid
    • validateInstanceVariable

      @Deprecated protected String validateInstanceVariable(IRubyObject name, String _unused_)
      Deprecated.
    • validateInstanceVariable

      protected String validateInstanceVariable(IRubyObject name)
    • callSuper

      @Deprecated public IRubyObject callSuper(ThreadContext context, IRubyObject[] args, Block block)
      Deprecated.
      Specified by:
      callSuper in interface IRubyObject
    • callMethod

      @Deprecated public final IRubyObject callMethod(ThreadContext context, int methodIndex, String name)
      Deprecated.
      Specified by:
      callMethod in interface IRubyObject
    • callMethod

      @Deprecated public final IRubyObject callMethod(ThreadContext context, int methodIndex, String name, IRubyObject arg)
      Deprecated.
      Specified by:
      callMethod in interface IRubyObject
    • convertToInteger

      @Deprecated public RubyInteger convertToInteger(int methodIndex, String convertMethod)
      Deprecated.
      Description copied from interface: IRubyObject
      convert this object to an integer
      Specified by:
      convertToInteger in interface IRubyObject
      Parameters:
      methodIndex - index
      convertMethod - conversion method name
      Returns:
      integer
      See Also:
    • getVariableCount

      @Deprecated public int getVariableCount()
      Deprecated.
      Description copied from interface: IRubyObject
      how many variables?
      Specified by:
      getVariableCount in interface IRubyObject
      Returns:
      the count of all variables (ivar/cvar/constant/internal)
    • variableTableFastContains

      @Deprecated protected boolean variableTableFastContains(String internedName)
      Deprecated.
    • variableTableFastFetch

      @Deprecated protected Object variableTableFastFetch(String internedName)
      Deprecated.
    • variableTableFastStore

      @Deprecated protected Object variableTableFastStore(String internedName, Object value)
      Deprecated.
    • fastHasInternalVariable

      @Deprecated public boolean fastHasInternalVariable(String internedName)
      Deprecated.
      Specified by:
      fastHasInternalVariable in interface InternalVariables
    • fastGetInternalVariable

      @Deprecated public Object fastGetInternalVariable(String internedName)
      Deprecated.
      Specified by:
      fastGetInternalVariable in interface InternalVariables
    • fastSetInternalVariable

      @Deprecated public void fastSetInternalVariable(String internedName, Object value)
      Deprecated.
      Specified by:
      fastSetInternalVariable in interface InternalVariables
    • syncVariables

      @Deprecated public void syncVariables(List<Variable<Object>> variables)
      Deprecated.
      Description copied from interface: IRubyObject
      Sets object's variables to those in the supplied list, removing/replacing any previously defined variables. Applies to all variable types (ivar/cvar/constant/internal).
      Specified by:
      syncVariables in interface IRubyObject
      Parameters:
      variables - the variables to be set for object
    • fastHasInstanceVariable

      @Deprecated public boolean fastHasInstanceVariable(String internedName)
      Deprecated.
      Specified by:
      fastHasInstanceVariable in interface InstanceVariables
    • fastGetInstanceVariable

      @Deprecated public IRubyObject fastGetInstanceVariable(String internedName)
      Deprecated.
      Specified by:
      fastGetInstanceVariable in interface InstanceVariables
    • fastSetInstanceVariable

      @Deprecated public IRubyObject fastSetInstanceVariable(String internedName, IRubyObject value)
      Deprecated.
      Specified by:
      fastSetInstanceVariable in interface InstanceVariables
    • isUntrusted

      @Deprecated public boolean isUntrusted()
      Deprecated.
      Description copied from interface: IRubyObject
      RubyMethod isUntrusted.
      Specified by:
      isUntrusted in interface IRubyObject
      Returns:
      boolean
    • setUntrusted

      @Deprecated public void setUntrusted(boolean untrusted)
      Deprecated.
      Description copied from interface: IRubyObject
      RubyMethod setUntrusted.
      Specified by:
      setUntrusted in interface IRubyObject
      Parameters:
      untrusted - boolean
    • untrusted_p

      @Deprecated public RubyBoolean untrusted_p(ThreadContext context)
      Deprecated.
    • untrust

      @Deprecated public IRubyObject untrust(ThreadContext context)
      Deprecated.
    • trust

      @Deprecated public IRubyObject trust(ThreadContext context)
      Deprecated.
    • getNativeHandle

      @Deprecated public final Object getNativeHandle()
      Deprecated.
    • setNativeHandle

      @Deprecated public final void setNativeHandle(Object value)
      Deprecated.
    • dataGetStructChecked

      @Deprecated public Object dataGetStructChecked()
      Deprecated.
      Specified by:
      dataGetStructChecked in interface IRubyObject
    • to_a

      @Deprecated public RubyArray to_a()
      Deprecated.
    • tainted_p

      @Deprecated public RubyBoolean tainted_p(ThreadContext context)
      Deprecated.
    • taint

      @Deprecated public IRubyObject taint(ThreadContext context)
      Deprecated.
    • taint

      @Deprecated protected final void taint(Ruby runtime)
      Deprecated.
    • untaint

      @Deprecated public IRubyObject untaint(ThreadContext context)
      Deprecated.
    • isTaint

      @Deprecated public boolean isTaint()
      Deprecated.
      Specified by:
      isTaint in interface IRubyObject
    • setTaint

      @Deprecated public void setTaint(boolean taint)
      Deprecated.
      Specified by:
      setTaint in interface IRubyObject
    • infectBy

      @Deprecated public IRubyObject infectBy(IRubyObject obj)
      Deprecated.
      Specified by:
      infectBy in interface IRubyObject