org.jruby
Class RubyObject

java.lang.Object
  extended by org.jruby.RubyObject
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, InstanceVariables, InternalVariables, IRubyObject, CoreObjectType
Direct Known Subclasses:
FiberLibrary.Fiber, JavaAccessibleObject, JavaObject, JavaProxyReflectionObject, JRubyObjectInputStream, MiniJava.JavaObjectWrapper, MockRubyObject, RubyArray, RubyBinding, RubyBoolean, RubyClassPathVariable, RubyDigest.Base, RubyDir, RubyEnumerator, RubyException, RubyFileStat, RubyHash, RubyIconv, RubyIO, RubyMatchData, RubyMethod, RubyModule, RubyNameError.RubyNameErrorMessage, RubyNil, RubyNumeric, RubyProc, RubyProcess.RubyStatus, RubyRange, RubyRegexp, RubyString, RubyStringIO, RubyStringScanner, RubyStruct, RubySymbol, RubyThread, RubyThreadGroup, RubyTime, RubyZlib.RubyGzipFile, RubyZlib.ZStream, ThreadLibrary.ConditionVariable, ThreadLibrary.Mutex, ThreadLibrary.Queue, WeakRef

public class RubyObject
extends java.lang.Object
implements java.lang.Cloneable, IRubyObject, java.io.Serializable, CoreObjectType, InstanceVariables, InternalVariables

RubyObject is the only implementation of the IRubyObject. Every Ruby object in JRuby is represented by something that is an instance of RubyObject. In some of the core class implementations, this means doing a subclass that extends RubyObject, in other cases it means using a simple RubyObject instance and the data field 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().

Author:
jpetersen
See Also:
Serialized Form

Nested Class Summary
 class RubyObject.Finalizer
          Class that keeps track of the finalizers for the object under operation.
static class RubyObject.ObjectMethods
          Interestingly, the Object class doesn't really have that many methods for itself.
protected static class RubyObject.VariableTableEntry
          Every entry in the variable map is represented by an instance of this class.
 
Field Summary
static int ALL_F
           
protected static java.lang.String ERR_INSECURE_SET_INST_VAR
          The error message used when some one tries to modify an instance variable in a high security setting.
static int FALSE_F
           
static int FL_USHIFT
           
protected  int flags
           
static int FROZEN_F
           
protected  RubyClass metaClass
           
static IRubyObject NEVER
          A value that is used as a null sentinel in among other places the RubyArray implementation.
static int NIL_F
          This flag is a bit funny.
static ObjectAllocator OBJECT_ALLOCATOR
          Default allocator instance for all Ruby objects.
static int TAINTED_F
           
static IRubyObject UNDEF
          A value that specifies an undefined value.
static int USER0_F
           
static int USER1_F
           
static int USER2_F
           
static int USER3_F
           
static int USER4_F
           
static int USER5_F
           
static int USER6_F
           
static int USER7_F
           
protected static int VARIABLE_TABLE_DEFAULT_CAPACITY
           
protected static RubyObject.VariableTableEntry[] VARIABLE_TABLE_EMPTY_TABLE
           
protected static float VARIABLE_TABLE_LOAD_FACTOR
           
protected static int VARIABLE_TABLE_MAXIMUM_CAPACITY
           
protected  RubyObject.VariableTableEntry[] variableTable
          The variableTable contains variables for an object, defined as: instance variables class variables (for classes/modules) internal variables (such as those used when marshaling RubyRange and RubyException) Constants are stored separately, see RubyModule.
protected  int variableTableSize
           
protected  int variableTableThreshold
           
 
Fields inherited from interface org.jruby.runtime.builtin.IRubyObject
NULL_ARRAY
 
Constructor Summary
  RubyObject(Ruby runtime, RubyClass metaClass)
          Standard path for object creation.
protected RubyObject(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.
 
Method Summary
 void addFinalizer(IRubyObject finalizer)
          Adds the specified object as a finalizer for this object.
 IRubyObject anyToString()
          Internal method that helps to convert any object into the format of a class name and a hex string inside of #<>.
 IRubyObject as(java.lang.Class javaClass)
           
 java.lang.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.
 RubyString asString()
          rb_obj_as_string First converts this object into a String using the "to_s" method, infects it with the current taint and returns it.
 void attachToObjectSpace()
          Will make sure that this object is added to the current object space.
 void callInit(IRubyObject[] args, Block block)
          Call the Ruby initialize method with the supplied arguments and block.
 IRubyObject callMethod(ThreadContext context, int methodIndex, java.lang.String name)
          Will invoke an indexed method with the no arguments and no block.
 IRubyObject callMethod(ThreadContext context, int methodIndex, java.lang.String name, IRubyObject arg)
          Will invoke an indexed method with the one argument and no block with a functional invocation.
 IRubyObject callMethod(ThreadContext context, java.lang.String name)
          Will invoke a named method with no arguments and no block.
 IRubyObject callMethod(ThreadContext context, java.lang.String name, IRubyObject arg)
          Will invoke a named method with one argument and no block with functional invocation.
 IRubyObject callMethod(ThreadContext context, java.lang.String name, IRubyObject[] args)
          Will invoke a named method with the supplied arguments and no block with functional invocation.
 IRubyObject callMethod(ThreadContext context, java.lang.String name, IRubyObject[] args, Block block)
          Will invoke a named method with the supplied arguments and supplied block with functional invocation.
 IRubyObject callSuper(ThreadContext context, IRubyObject[] args, Block block)
          The protocol for super method invocation is a bit complicated in Ruby.
 IRubyObject checkArrayType()
          rb_check_array_type Returns the result of trying to convert this object to an Array with "to_ary".
protected  void checkFrozen()
          The actual method that checks frozen with the default frozen message from MRI.
 IRubyObject checkStringType()
          rb_check_string_type Tries to return a coerced string representation of this object, using "to_str".
 RubyArray convertToArray()
          Tries to convert this object to a Ruby Array using the "to_ary" method.
 RubyFloat convertToFloat()
          Tries to convert this object to a Ruby Float using the "to_f" method.
 RubyHash convertToHash()
          Tries to convert this object to a Ruby Hash using the "to_hash" method.
 RubyInteger convertToInteger()
          Tries to convert this object to a Ruby Integer using the "to_int" method.
 RubyInteger convertToInteger(int convertMethodIndex, java.lang.String convertMethod)
          Tries to convert this object to a Ruby Integer using the supplied conversion method.
 RubyString convertToString()
          Tries to convert this object to a Ruby String using the "to_str" method.
 IRubyObject convertToType(RubyClass target, int convertMethodIndex)
          Tries to convert this object to the specified Ruby type, using a specific conversion method.
protected  void copySpecialInstanceVariables(IRubyObject clone)
          Lots of MRI objects keep their state in non-lookupable ivars (e:g.
static RubyClass createObjectClass(Ruby runtime, RubyClass objectClass)
          Will create the Ruby class Object in the runtime specified.
 java.lang.Object dataGetStruct()
          Our version of Data_Get_Struct.
 void dataWrapStruct(java.lang.Object obj)
          Our version of Data_Wrap_Struct.
 IRubyObject display(ThreadContext context, IRubyObject[] args)
          rb_obj_display call-seq: obj.display(port=$>) => nil Prints obj on the given port (default $>).
 IRubyObject dup()
          rb_obj_dup This method should be overridden only by: Proc Will allocate a new instance of the real class of this object, and then initialize that copy.
protected  void ensureInstanceVariablesSettable()
          Makes sure that instance variables can be set on this object, including information about whether this object is frozen, or tainted.
 IRubyObject eql_p(IRubyObject obj)
          rb_obj_equal Just like "==" and "equal?", "eql?" will use identity equality for Object.
 boolean eql(IRubyObject other)
          method used for Hash key comparison (specialized for String, Symbol and Fixnum) Will by default just call the Ruby method "eql?"
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.
 IRubyObject equal_p(ThreadContext context, IRubyObject obj)
          rb_obj_equal Will use Java identity equality.
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.
 boolean equals(java.lang.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.
 IRubyObject evalUnder(ThreadContext context, RubyModule under, IRubyObject src, IRubyObject file, IRubyObject line)
          Deprecated. Call with an int line number and String file
 IRubyObject evalUnder(ThreadContext context, RubyModule under, RubyString src, java.lang.String file, int line)
          Evaluates the string src with self set to the current object, using the module under as the context.
 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.
 IRubyObject fastGetInstanceVariable(java.lang.String internedName)
          Returns the named instance variable if present, else null.
 IRubyObject fastGetInternalVariable(java.lang.String internedName)
          Returns the named internal variable if present, else null.
 boolean fastHasInstanceVariable(java.lang.String internedName)
          Returns true if object has the named instance variable.
 boolean fastHasInternalVariable(java.lang.String internedName)
          Returns true if object has the named internal variable.
 IRubyObject fastSetInstanceVariable(java.lang.String internedName, IRubyObject value)
          Sets the named instance variable to the specified value.
 void fastSetInternalVariable(java.lang.String internedName, IRubyObject value)
          Sets the named internal variable to the specified value.
 IRubyObject freeze(ThreadContext context)
          rb_obj_freeze call-seq: obj.freeze => obj Prevents further modifications to obj.
 RubyBoolean frozen_p(ThreadContext context)
          rb_obj_frozen_p call-seq: obj.frozen? => true or false Returns the freeze status of obj.
 boolean getFlag(int flag)
          Get the value of a custom flag on this object.
 IRubyObject getInstanceVariable(java.lang.String name)
          Returns the named instance variable if present, else null.
 java.util.List<Variable<IRubyObject>> getInstanceVariableList()
           
 java.util.List<java.lang.String> getInstanceVariableNameList()
           
 InstanceVariables getInstanceVariables()
          Dummy method to avoid a cast, and to avoid polluting the IRubyObject interface with all the instance variable management methods.
 IRubyObject getInternalVariable(java.lang.String name)
          Returns the named internal variable if present, else null.
 java.util.List<Variable<IRubyObject>> getInternalVariableList()
           
 InternalVariables getInternalVariables()
          Dummy method to avoid a cast, and to avoid polluting the IRubyObject interface with all the instance variable management methods.
 java.lang.Class getJavaClass()
          Will return the Java interface that most closely can represent this object, when working through JAva integration translations.
 RubyClass getMetaClass()
          if exist return the meta-class else return the type of the object.
 int getNativeTypeIndex()
          This is overridden in the other concrete Java builtins to provide a fast way to determine what type they are.
 Ruby getRuntime()
          Will return the runtime that this object is associated with.
 RubyClass getSingletonClass()
          rb_singleton_class Note: this method is specialized for RubyFixnum, RubySymbol, RubyNil and RubyBoolean Will either return the existing singleton class for this object, or create a new one and return that.
protected  RubyClass getSingletonClassClone()
          rb_singleton_class_clone Will make sure that if the current objects class is a singleton, it will get cloned.
 RubyClass getType()
          RubyMethod getType.
 int getVariableCount()
          Returns the amount of instance variables, class variables, constants and internal variables this object has.
 java.util.List<Variable<IRubyObject>> getVariableList()
          Gets a list of all variables in this object.
 java.util.Map getVariableMap()
          Deprecated. 
 java.util.List<java.lang.String> getVariableNameList()
          Gets a name list of all variables in this object.
 RubyFixnum hash()
          rb_obj_id Will return the hash code of this object.
 int hashCode()
          Override the Object#hashCode method to make sure that the Ruby hash is actually used as the hashcode for Ruby objects.
 boolean hasInstanceVariable(java.lang.String name)
          Returns true if object has the named instance variable.
 boolean hasInternalVariable(java.lang.String name)
          Returns true if object has the named internal variable.
 boolean hasVariables()
          Returns true if object has any variables, defined as: instance variables class variables constants internal variables, such as those used when marshaling Ranges and Exceptions
 IRubyObject id_deprecated()
          rb_obj_id_obsolete Old id version.
 IRubyObject id()
          rb_obj_id Return the internal id of an object.
 IRubyObject infectBy(IRubyObject obj)
          OBJ_INFECT Infects this object with traits from the argument obj.
 IRubyObject initialize_copy(IRubyObject original)
          rb_obj_init_copy Initializes this object as a copy of the original, that is the parameter to this object.
 IRubyObject initialize()
          rb_obj_dummy Default initialize method.
 IRubyObject inspect()
          rb_obj_inspect call-seq: obj.inspect => string Returns a string containing a human-readable representation of obj.
 IRubyObject instance_eval(ThreadContext context, Block block)
          rb_obj_instance_eval call-seq: obj.instance_eval(string [, filename [, lineno]] ) => obj obj.instance_eval {| | block } => obj Evaluates a string containing Ruby source code, or the given block, within the context of the receiver (_obj_).
 IRubyObject instance_eval(ThreadContext context, IRubyObject[] args, Block block)
          Deprecated. 
 IRubyObject instance_eval(ThreadContext context, IRubyObject arg0, Block block)
           
 IRubyObject instance_eval(ThreadContext context, IRubyObject arg0, IRubyObject arg1, Block block)
           
 IRubyObject instance_eval(ThreadContext context, IRubyObject arg0, IRubyObject arg1, IRubyObject arg2, Block block)
           
 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_).
 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.
 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.
 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.
 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.
 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.
 boolean isClass()
          Specifically polymorphic method that are meant to be overridden by classes to specify that they are classes in an easy way.
 boolean isFalse()
          Is this value a false value or not? Based on the FALSE_F flag.
 boolean isFrozen()
          Is this value frozen or not? Shortcut for doing getFlag(FROZEN_F).
 boolean isImmediate()
          Is object immediate (def: Fixnum, Symbol, true, false, nil?).
 boolean isModule()
          Specifically polymorphic method that are meant to be overridden by modules to specify that they are modules in an easy way.
 boolean isNil()
          Does this object represent nil? See the docs for the NIL_F flag for more information.
protected static boolean isRubyVariable(java.lang.String name)
          Check the syntax of a Ruby variable, including that it's longer than zero characters, and starts with either an @ or a capital letter.
 boolean isTaint()
          Gets the taint.
 boolean isTrue()
          Is this value a true value or not? Based on the FALSE_F flag.
 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.
 RubyClass makeMetaClass(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.
 IRubyObject method(IRubyObject symbol)
          rb_obj_method call-seq: obj.method(sym) => method Looks up the named method as a receiver in obj, returning a Method object (or raising NameError).
 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.
 IRubyObject nil_p(ThreadContext context)
          rb_false call_seq: nil.nil? => true .nil? => false Only the object nil responds true to nil?.
 IRubyObject op_eqq(ThreadContext context, IRubyObject other)
          rb_equal The Ruby "===" method is used by default in case/when statements.
 IRubyObject op_equal(ThreadContext context, IRubyObject obj)
          rb_obj_equal Will by default use identity equality to compare objects.
 IRubyObject op_match(ThreadContext context, IRubyObject arg)
          rb_obj_pattern_match call-seq: obj =~ other => false Pattern Match---Overridden by descendents (notably Regexp and String) to provide meaningful pattern-match semantics.
 IRubyObject private_methods(ThreadContext context, IRubyObject[] args)
          rb_obj_private_methods call-seq: obj.private_methods(all=true) => array Returns the list of private methods accessible to obj.
 IRubyObject protected_methods(ThreadContext context, IRubyObject[] args)
          rb_obj_protected_methods call-seq: obj.protected_methods(all=true) => array Returns the list of protected methods accessible to obj.
 IRubyObject public_methods(ThreadContext context, IRubyObject[] args)
          rb_obj_public_methods call-seq: obj.public_methods(all=true) => array Returns the list of public methods accessible to obj.
static void puts(java.lang.Object obj)
          Simple helper to print any objects.
 IRubyObject rbClone()
          rb_obj_clone This method should be overridden only by: Proc, Method, UnboundedMethod, Binding.
 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.
 void removeFinalizers()
          Remove all the finalizers for this object.
 IRubyObject removeInstanceVariable(java.lang.String name)
          Removes the named instance variable, if present, returning its value.
 IRubyObject removeInternalVariable(java.lang.String name)
          Removes the named internal variable, if present, returning its value.
 RubyBoolean respond_to_p(IRubyObject mname)
          obj_respond_to respond_to?( aSymbol, includePriv=false ) -> true or false Returns true if this object responds to the given method.
 RubyBoolean respond_to_p(IRubyObject mname, IRubyObject includePrivate)
          obj_respond_to respond_to?( aSymbol, includePriv=false ) -> true or false Returns true if this object responds to the given method.
 boolean respondsTo(java.lang.String name)
          Does this object respond to the specified message? Uses a shortcut if it can be proved that respond_to? haven't been overridden.
 IRubyObject send(ThreadContext context, IRubyObject[] args, Block block)
          rb_f_send send( aSymbol [, args ]* ) -> anObject Invokes the method identified by aSymbol, passing it any arguments specified.
 void setFlag(int flag, boolean set)
          Sets or unsets a flag on this object.
 void setFrozen(boolean frozen)
          Sets whether this object is frozen or not.
 IRubyObject setInstanceVariable(java.lang.String name, IRubyObject value)
          rb_iv_set / rb_ivar_set
 void setInternalVariable(java.lang.String name, IRubyObject value)
          Sets the named internal variable to the specified value.
 void setMetaClass(RubyClass metaClass)
          Makes it possible to change the metaclass of an object.
 void setTaint(boolean taint)
          Sets the taint flag.
 RubyArray singleton_methods(ThreadContext context, IRubyObject[] args)
          rb_obj_singleton_methods call-seq: obj.singleton_methods(all=true) => array Returns an array of the names of singleton methods for obj.
 IRubyObject specificEval(ThreadContext context, RubyModule mod, Block block)
          specific_eval Evaluates the block or string inside of the context of this object, using the supplied arguments.
 IRubyObject specificEval(ThreadContext context, RubyModule mod, IRubyObject[] args, Block block)
          Deprecated. 
 IRubyObject specificEval(ThreadContext context, RubyModule mod, IRubyObject arg, Block block)
          specific_eval Evaluates the block or string inside of the context of this object, using the supplied arguments.
 IRubyObject specificEval(ThreadContext context, RubyModule mod, IRubyObject arg0, IRubyObject arg1, Block block)
          specific_eval Evaluates the block or string inside of the context of this object, using the supplied arguments.
 IRubyObject specificEval(ThreadContext context, RubyModule mod, IRubyObject arg0, IRubyObject arg1, IRubyObject arg2, Block block)
          specific_eval Evaluates the block or string inside of the context of this object, using the supplied arguments.
 void syncVariables(java.util.List<Variable<IRubyObject>> variables)
          Sync one variable table with another - this is used to make rbClone work correctly.
 IRubyObject taint(ThreadContext context)
          rb_obj_taint call-seq: obj.taint -> obj Marks obj as tainted---if the $SAFE level is set appropriately, many method calls which might alter the running programs environment will refuse to accept tainted strings.
 RubyBoolean tainted_p(ThreadContext context)
          rb_obj_tainted call-seq: obj.tainted? => true or false Returns true if the object is tainted.
protected  void testFrozen(java.lang.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.
 RubyArray to_a()
          rb_any_to_a call-seq: obj.to_a -> anArray Returns an array representation of obj.
 IRubyObject to_java()
           
 IRubyObject to_s()
          rb_any_to_s call-seq: obj.to_s => string Returns a string representing obj.
 java.lang.String toString()
          The default toString method is just a wrapper that calls the Ruby "to_s" method.
 RubyClass type_deprecated()
          rb_obj_type The deprecated version of type, that emits a deprecation warning.
 RubyClass type()
          rb_obj_class Returns the real class of this object, excluding any singleton/meta class in the inheritance chain.
 IRubyObject untaint(ThreadContext context)
          rb_obj_untaint call-seq: obj.untaint => obj Removes the taint from obj.
protected  java.lang.String validateInstanceVariable(java.lang.String name)
          Checks if the name parameter represents a legal instance variable name, and otherwise throws a Ruby NameError
protected  boolean variableTableContains(java.lang.String name)
          Checks if the variable table contains a variable of the specified name.
protected  boolean variableTableFastContains(java.lang.String internedName)
          Checks if the variable table contains the the variable of the specified name, where the precondition is that the name must be an interned Java String.
protected  IRubyObject variableTableFastFetch(java.lang.String internedName)
          Fetch an object from the variable table based on the name, where the name must be an interned Java String.
protected  IRubyObject variableTableFastStore(java.lang.String internedName, IRubyObject value)
          Will store the value under the specified name, where the name needs to be an interned Java String.
protected  IRubyObject variableTableFetch(java.lang.String name)
          Fetch an object from the variable table based on the name.
protected  java.util.Map variableTableGetMap()
          Method to help ease transition to new variables implementation.
protected  java.util.Map variableTableGetMap(java.util.Map map)
          Method to help ease transition to new variables implementation.
protected  int variableTableGetSize()
          Get the size of the variable table.
protected  RubyObject.VariableTableEntry[] variableTableGetTable()
          Get the actual table used to save variable entries.
protected  IRubyObject variableTableReadLocked(RubyObject.VariableTableEntry entry)
          Reads the value of the specified entry, locked on the current object.
protected  RubyObject.VariableTableEntry[] variableTableRehash()
          Rehashes the variable table.
protected  IRubyObject variableTableRemove(java.lang.String name)
          Removes the entry with the specified name from the variable table, and returning the removed value.
protected  IRubyObject variableTableStore(java.lang.String name, IRubyObject value)
          Store a value in the variable store under the specific name.
protected  void variableTableSync(java.util.List<Variable<IRubyObject>> vars)
          Synchronize the variable table with the argument.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

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.


metaClass

protected transient RubyClass metaClass

variableTable

protected transient volatile RubyObject.VariableTableEntry[] variableTable
The variableTable contains variables for an object, defined as: Constants are stored separately, see RubyModule.


variableTableSize

protected transient int variableTableSize

variableTableThreshold

protected transient int variableTableThreshold

flags

protected int flags

ALL_F

public static final int ALL_F
See Also:
Constant Field Values

FALSE_F

public static final int FALSE_F
See Also:
Constant Field Values

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.

See Also:
Constant Field Values

FROZEN_F

public static final int FROZEN_F
See Also:
Constant Field Values

TAINTED_F

public static final int TAINTED_F
See Also:
Constant Field Values

FL_USHIFT

public static final int FL_USHIFT
See Also:
Constant Field Values

USER0_F

public static final int USER0_F
See Also:
Constant Field Values

USER1_F

public static final int USER1_F
See Also:
Constant Field Values

USER2_F

public static final int USER2_F
See Also:
Constant Field Values

USER3_F

public static final int USER3_F
See Also:
Constant Field Values

USER4_F

public static final int USER4_F
See Also:
Constant Field Values

USER5_F

public static final int USER5_F
See Also:
Constant Field Values

USER6_F

public static final int USER6_F
See Also:
Constant Field Values

USER7_F

public static final int USER7_F
See Also:
Constant Field Values

OBJECT_ALLOCATOR

public static final ObjectAllocator OBJECT_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:
ObjectAllocator

ERR_INSECURE_SET_INST_VAR

protected static final java.lang.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:
Constant Field Values

VARIABLE_TABLE_DEFAULT_CAPACITY

protected static final int VARIABLE_TABLE_DEFAULT_CAPACITY
See Also:
Constant Field Values

VARIABLE_TABLE_MAXIMUM_CAPACITY

protected static final int VARIABLE_TABLE_MAXIMUM_CAPACITY
See Also:
Constant Field Values

VARIABLE_TABLE_LOAD_FACTOR

protected static final float VARIABLE_TABLE_LOAD_FACTOR
See Also:
Constant Field Values

VARIABLE_TABLE_EMPTY_TABLE

protected static final RubyObject.VariableTableEntry[] VARIABLE_TABLE_EMPTY_TABLE
Constructor Detail

RubyObject

public RubyObject(Ruby runtime,
                  RubyClass metaClass)
Standard path for object creation. Objects are entered into ObjectSpace only if ObjectSpace is enabled.


RubyObject

protected RubyObject(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)

Method Detail

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

createObjectClass

public static RubyClass createObjectClass(Ruby runtime,
                                          RubyClass objectClass)
Will create the Ruby class Object 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.


attachToObjectSpace

public void attachToObjectSpace()
Will make sure that this object is added to the current object space.

See Also:
ObjectSpace

getNativeTypeIndex

public int getNativeTypeIndex()
This is overridden in the other concrete Java builtins to provide a fast way to determine what type they are. Will generally return a value from org.jruby.runtime.ClassIndex

Specified by:
getNativeTypeIndex in interface CoreObjectType
Returns:
the ClassIndex of the native type this object was constructed from
See Also:
org.jruby.runtime.ClassInde

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). If is_a? semantics is required, use (someObject instanceof RubyModule) instead.

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). If is_a? semantics is required, use (someObject instanceof RubyClass/MetaClass) instead.

isImmediate

public boolean isImmediate()
Is object immediate (def: Fixnum, Symbol, true, false, nil?).

Specified by:
isImmediate in interface IRubyObject
Returns:

makeMetaClass

public RubyClass makeMetaClass(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.


getJavaClass

public java.lang.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:
Class

puts

public static void puts(java.lang.Object obj)
Simple helper to print any objects.


equals

public boolean equals(java.lang.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 java.lang.Object

toString

public java.lang.String toString()
The default toString method is just a wrapper that calls the Ruby "to_s" method.

Overrides:
toString in class java.lang.Object

getRuntime

public final Ruby getRuntime()
Will return the runtime that this object is associated with.

Specified by:
getRuntime in interface IRubyObject
Returns:
current runtime

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:

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.


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?

testFrozen

protected final void testFrozen(java.lang.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.


checkFrozen

protected 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).


isTaint

public boolean isTaint()
Gets the taint. Shortcut for getFlag(TAINTED_F).

Specified by:
isTaint in interface IRubyObject
Returns:
true if this object is tainted

setTaint

public void setTaint(boolean taint)
Sets the taint flag. Shortcut for setFlag(TAINTED_F, taint)

Specified by:
setTaint in interface IRubyObject
Parameters:
taint - should this object be tainted or not?

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:
boolean

isTrue

public final boolean isTrue()
Is this value a true value or not? Based on the FALSE_F flag.

Specified by:
isTrue in interface IRubyObject
Returns:

isFalse

public final boolean isFalse()
Is this value a false value or not? Based on the FALSE_F flag.


respondsTo

public final boolean respondsTo(java.lang.String name)
Does this object respond to the specified message? Uses a shortcut if it can be proved that respond_to? haven't been overridden.

Specified by:
respondsTo in interface IRubyObject
Returns:
boolean

getSingletonClass

public RubyClass getSingletonClass()
rb_singleton_class Note: this method is specialized for RubyFixnum, RubySymbol, RubyNil and RubyBoolean Will either return the existing singleton class for this object, or create a new one and return that.

Specified by:
getSingletonClass in interface IRubyObject
Returns:
RubyClass

getSingletonClassClone

protected RubyClass getSingletonClassClone()
rb_singleton_class_clone Will make sure that if the current objects class is a singleton, it will get cloned.

Returns:
either a real class, or a clone of the current singleton class

infectBy

public IRubyObject infectBy(IRubyObject obj)
OBJ_INFECT Infects this object with traits from the argument obj. In real terms this currently means that if obj is tainted, this object will get tainted too. It's possible to hijack this method to do other infections if that would be interesting.

Specified by:
infectBy in interface IRubyObject
Returns:

callSuper

public IRubyObject callSuper(ThreadContext context,
                             IRubyObject[] args,
                             Block block)
The protocol for super method invocation is a bit complicated in Ruby. In real terms it involves first finding the real implementation class (the super class), getting the name of the method to call from the frame, and then invoke that on the super class with the current self as the actual object invoking.

Specified by:
callSuper in interface IRubyObject

callMethod

public final IRubyObject callMethod(ThreadContext context,
                                    java.lang.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,
                                    java.lang.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,
                                    java.lang.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(ThreadContext context,
                                    java.lang.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

callMethod

public final IRubyObject callMethod(ThreadContext context,
                                    int methodIndex,
                                    java.lang.String name)
Will invoke an indexed method with the no arguments and no block.

Specified by:
callMethod in interface IRubyObject

callMethod

public final IRubyObject callMethod(ThreadContext context,
                                    int methodIndex,
                                    java.lang.String name,
                                    IRubyObject arg)
Will invoke an indexed method with the one argument and no block with a functional invocation.

Specified by:
callMethod in interface IRubyObject

callInit

public final void callInit(IRubyObject[] args,
                           Block block)
Call the Ruby initialize method with the supplied arguments and block.


asJavaString

public java.lang.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:
String the symbol name

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:

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:

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:

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:

convertToInteger

public RubyInteger convertToInteger(int convertMethodIndex,
                                    java.lang.String convertMethod)
Tries to convert this object to a Ruby Integer using the supplied conversion method.

Specified by:
convertToInteger in interface IRubyObject
Returns:

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:

convertToType

public final IRubyObject convertToType(RubyClass target,
                                       int convertMethodIndex)
Tries to convert this object to the specified Ruby type, using a specific conversion method.


asString

public RubyString asString()
rb_obj_as_string First converts this object into a String using the "to_s" method, infects it with the current taint and returns it. If to_s doesn't return a Ruby String, anyToString() is used instead.

Specified by:
asString in interface IRubyObject
Returns:

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:

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:

specificEval

@Deprecated
public IRubyObject specificEval(ThreadContext context,
                                           RubyModule mod,
                                           IRubyObject[] args,
                                           Block block)
Deprecated. 

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.


specificEval

public IRubyObject specificEval(ThreadContext context,
                                RubyModule mod,
                                Block block)
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.


specificEval

public IRubyObject specificEval(ThreadContext context,
                                RubyModule mod,
                                IRubyObject arg,
                                Block block)
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.


specificEval

public IRubyObject specificEval(ThreadContext context,
                                RubyModule mod,
                                IRubyObject arg0,
                                IRubyObject arg1,
                                Block block)
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.


specificEval

public IRubyObject specificEval(ThreadContext context,
                                RubyModule mod,
                                IRubyObject arg0,
                                IRubyObject arg1,
                                IRubyObject arg2,
                                Block block)
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.


evalUnder

public IRubyObject evalUnder(ThreadContext context,
                             RubyModule under,
                             IRubyObject src,
                             IRubyObject file,
                             IRubyObject line)
Deprecated. Call with an int line number and String file

Evaluates the string src with self set to the current object, using the module under as the context.


evalUnder

public IRubyObject evalUnder(ThreadContext context,
                             RubyModule under,
                             RubyString src,
                             java.lang.String file,
                             int line)
Evaluates the string src with self set to the current object, using the module under as the context.


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.

Specified by:
op_equal in interface IRubyObject

equal_p

public IRubyObject equal_p(ThreadContext context,
                           IRubyObject obj)
rb_obj_equal Will use Java identity equality.


eql

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

Specified by:
eql in interface IRubyObject

eql_p

public IRubyObject eql_p(IRubyObject obj)
rb_obj_equal Just like "==" and "equal?", "eql?" will use identity equality for Object.


op_eqq

public IRubyObject op_eqq(ThreadContext context,
                          IRubyObject other)
rb_equal The Ruby "===" method is used by default in case/when statements. The Object implementation first checks Java identity equality and then calls the "==" method too.

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.


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.


initialize_copy

public IRubyObject initialize_copy(IRubyObject original)
rb_obj_init_copy 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.


respond_to_p

public RubyBoolean respond_to_p(IRubyObject mname)
obj_respond_to respond_to?( aSymbol, includePriv=false ) -> true or false Returns true if this object responds to the given method. Private methods are included in the search only if the optional second parameter evaluates to true.

Returns:
true if this responds to the given method !!! For some reason MRI shows the arity of respond_to? as -1, when it should be -2; that's why this is rest instead of required, optional = 1 Going back to splitting according to method arity. MRI is wrong about most of these anyway, and since we have arity splitting in both the compiler and the interpreter, the performance benefit is important for this method.

respond_to_p

public RubyBoolean respond_to_p(IRubyObject mname,
                                IRubyObject includePrivate)
obj_respond_to respond_to?( aSymbol, includePriv=false ) -> true or false Returns true if this object responds to the given method. Private methods are included in the search only if the optional second parameter evaluates to true.

Returns:
true if this responds to the given method !!! For some reason MRI shows the arity of respond_to? as -1, when it should be -2; that's why this is rest instead of required, optional = 1 Going back to splitting according to method arity. MRI is wrong about most of these anyway, and since we have arity splitting in both the compiler and the interpreter, the performance benefit is important for this method.

id

public IRubyObject id()
rb_obj_id Return the internal id of an object. FIXME: Should this be renamed to match its ruby name?

Specified by:
id in interface IRubyObject
Returns:

id_deprecated

public IRubyObject id_deprecated()
rb_obj_id_obsolete Old id version. This one is bound to the "id" name and will emit a deprecation warning.


hash

public RubyFixnum hash()
rb_obj_id 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.


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 java.lang.Object

type

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


type_deprecated

public RubyClass type_deprecated()
rb_obj_type The deprecated version of type, that emits a deprecation warning.


rbClone

public IRubyObject rbClone()
rb_obj_clone This method should be overridden only by: Proc, Method, UnboundedMethod, Binding. It will use the defined allocated of the object, then clone the singleton class, taint the object, call initCopy and then copy frozen state.

Specified by:
rbClone in interface IRubyObject
Returns:
IRubyObject

dup

public IRubyObject dup()
rb_obj_dup This method should be overridden only by: Proc Will allocate a new instance of the real class of this object, and then initialize that copy. It's different from rbClone() in that it doesn't copy the singleton class.

Specified by:
dup in interface IRubyObject
Returns:

copySpecialInstanceVariables

protected 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


display

public IRubyObject display(ThreadContext context,
                           IRubyObject[] args)
rb_obj_display call-seq: obj.display(port=$>) => nil Prints obj on the given port (default $>). Equivalent to: def display(port=$>) port.write self end For example: 1.display "cat".display [ 4, 5, 6 ].display puts produces: 1cat456


tainted_p

public RubyBoolean tainted_p(ThreadContext context)
rb_obj_tainted call-seq: obj.tainted? => true or false Returns true if the object is tainted.


taint

public IRubyObject taint(ThreadContext context)
rb_obj_taint call-seq: obj.taint -> obj Marks obj as tainted---if the $SAFE level is set appropriately, many method calls which might alter the running programs environment will refuse to accept tainted strings.


untaint

public IRubyObject untaint(ThreadContext context)
rb_obj_untaint call-seq: obj.untaint => obj Removes the taint from obj. Only callable in if more secure than 3.


freeze

public IRubyObject freeze(ThreadContext context)
rb_obj_freeze call-seq: obj.freeze => obj Prevents further modifications to obj. A TypeError will be raised if modification is attempted. There is no way to unfreeze a frozen object. See also Object#frozen?. a = [ "a", "b", "c" ] a.freeze a << "z" produces: prog.rb:3:in `<<': can't modify frozen array (TypeError) from prog.rb:3


frozen_p

public RubyBoolean frozen_p(ThreadContext context)
rb_obj_frozen_p call-seq: obj.frozen? => true or false Returns the freeze status of obj. a = [ "a", "b", "c" ] a.freeze #=> ["a", "b", "c"] a.frozen? #=> true


inspect

public IRubyObject inspect()
rb_obj_inspect call-seq: obj.inspect => string 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
Returns:
String

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?.


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


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


public_methods

public IRubyObject public_methods(ThreadContext context,
                                  IRubyObject[] args)
rb_obj_public_methods call-seq: obj.public_methods(all=true) => array Returns the list of public methods accessible to obj. If the all parameter is set to false, only those methods in the receiver will be listed.


protected_methods

public IRubyObject protected_methods(ThreadContext context,
                                     IRubyObject[] args)
rb_obj_protected_methods call-seq: obj.protected_methods(all=true) => array Returns the list of protected methods accessible to obj. If the all parameter is set to false, only those methods in the receiver will be listed. Internally this implementation uses the RubyModule.protected_instance_methods(org.jruby.runtime.builtin.IRubyObject[]) method.


private_methods

public IRubyObject private_methods(ThreadContext context,
                                   IRubyObject[] args)
rb_obj_private_methods call-seq: obj.private_methods(all=true) => array Returns the list of private methods accessible to obj. If the all parameter is set to false, only those methods in the receiver will be listed. Internally this implementation uses the RubyModule.private_instance_methods(org.jruby.runtime.builtin.IRubyObject[]) method.


singleton_methods

public RubyArray singleton_methods(ThreadContext context,
                                   IRubyObject[] args)
rb_obj_singleton_methods call-seq: obj.singleton_methods(all=true) => array Returns an array of the names of singleton methods for obj. If the optional all parameter is true, the list will include methods in modules included in obj. module Other def three() end end class Single def Single.four() end end a = Single.new def a.one() end class << a include Other def two() end end Single.singleton_methods #=> ["four"] a.singleton_methods(false) #=> ["two", "one"] a.singleton_methods #=> ["two", "one", "three"]


method

public IRubyObject method(IRubyObject symbol)
rb_obj_method call-seq: obj.method(sym) => method Looks up the named method as a receiver in obj, returning a Method object (or raising NameError). The Method object acts as a closure in obj's object instance, so instance variables and the value of self remain available. class Demo def initialize(n)


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:

to_s

public IRubyObject to_s()
rb_any_to_s call-seq: obj.to_s => string Returns a string representing obj. The default to_s prints the object's class and an encoding of the object id. As a special case, the top-level object that is the initial execution context of Ruby programs returns ``main.''


to_a

public RubyArray to_a()
rb_any_to_a call-seq: obj.to_a -> anArray Returns an array representation of obj. For objects of class Object and others that don't explicitly override the method, the return value is an array containing self. However, this latter behavior will soon be obsolete. self.to_a #=> -:1: warning: default `to_a' will be obsolete "hello".to_a #=> ["hello"] Time.new.to_a #=> [39, 54, 8, 9, 4, 2003, 3, 99, true, "CDT"] The default to_a method is deprecated.


instance_eval

public IRubyObject instance_eval(ThreadContext context,
                                 Block block)
rb_obj_instance_eval call-seq: obj.instance_eval(string [, filename [, lineno]] ) => obj obj.instance_eval {| | block } => obj Evaluates a string containing Ruby source code, or 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. In the version of instance_eval that takes a +String+, the optional second and third parameters supply a filename and starting line number that are used when reporting compilation errors. class Klass def initialize


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

@Deprecated
public IRubyObject instance_eval(ThreadContext context,
                                            IRubyObject[] args,
                                            Block block)
Deprecated. 


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


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) #=> # k.hello #=> "Hello from Mod.\n"


initialize

public IRubyObject initialize()
rb_obj_dummy Default initialize method. This one gets defined in some other place as a Ruby method.


send

public IRubyObject send(ThreadContext context,
                        IRubyObject[] args,
                        Block block)
rb_f_send send( aSymbol [, args ]* ) -> anObject Invokes the method identified by aSymbol, passing it any arguments specified. You can use __send__ if the name send clashes with an existing method in this object.
 class Klass
   def hello(*args)
     "Hello " + args.join(' ')
   end
 end

 k = Klass.new
 k.send :hello, "gentle", "readers"
 

Returns:
the result of invoking the method identified by aSymbol.

nil_p

public IRubyObject nil_p(ThreadContext context)
rb_false call_seq: nil.nil? => true .nil? => false Only the object nil responds true to nil?.


op_match

public IRubyObject op_match(ThreadContext context,
                            IRubyObject arg)
rb_obj_pattern_match call-seq: obj =~ other => false Pattern Match---Overridden by descendents (notably Regexp and String) to provide meaningful pattern-match semantics.


to_java

public IRubyObject to_java()

as

public IRubyObject as(java.lang.Class javaClass)

getType

public RubyClass getType()
Description copied from interface: IRubyObject
RubyMethod getType.

Specified by:
getType in interface IRubyObject
Returns:
RubyClass
See Also:
IRubyObject.getType()

dataWrapStruct

public void dataWrapStruct(java.lang.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:
org.jruby.runtime.builtin.IRubyObject#dataWrapStruct()

dataGetStruct

public java.lang.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:
IRubyObject.dataGetStruct()

addFinalizer

public void addFinalizer(IRubyObject finalizer)
Adds the specified object as a finalizer for this object.

Specified by:
addFinalizer in interface IRubyObject

removeFinalizers

public void removeFinalizers()
Remove all the finalizers for this object.

Specified by:
removeFinalizers in interface IRubyObject

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)


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)


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)


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


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


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(java.lang.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:
InstanceVariables.hasInstanceVariable(java.lang.String)

fastHasInstanceVariable

public boolean fastHasInstanceVariable(java.lang.String internedName)
Description copied from interface: InstanceVariables
Returns true if object has the named instance variable. The supplied name must have been previously interned.

Specified by:
fastHasInstanceVariable in interface InstanceVariables
Parameters:
internedName - the interned name of an instance variable
Returns:
true if object has the named instance variable, else false
See Also:
InstanceVariables.fastHasInstanceVariable(java.lang.String)

getInstanceVariable

public IRubyObject getInstanceVariable(java.lang.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:
InstanceVariables.getInstanceVariable(java.lang.String)

fastGetInstanceVariable

public IRubyObject fastGetInstanceVariable(java.lang.String internedName)
Description copied from interface: InstanceVariables
Returns the named instance variable if present, else null. The supplied name must have been previously interned.

Specified by:
fastGetInstanceVariable in interface InstanceVariables
Parameters:
internedName - the interned name of an instance variable
Returns:
he named instance variable if present, else null
See Also:
InstanceVariables.fastGetInstanceVariable(java.lang.String)

setInstanceVariable

public IRubyObject setInstanceVariable(java.lang.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
See Also:
InstanceVariables.setInstanceVariable(java.lang.String, org.jruby.runtime.builtin.IRubyObject)

fastSetInstanceVariable

public IRubyObject fastSetInstanceVariable(java.lang.String internedName,
                                           IRubyObject value)
Description copied from interface: InstanceVariables
Sets the named instance variable to the specified value. The supplied name must have been previously interned.

Specified by:
fastSetInstanceVariable in interface InstanceVariables
Parameters:
internedName - the interned name of an instance variable
value - the value to be set
See Also:
InstanceVariables.fastSetInstanceVariable(java.lang.String, org.jruby.runtime.builtin.IRubyObject)

removeInstanceVariable

public IRubyObject removeInstanceVariable(java.lang.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:
InstanceVariables.removeInstanceVariable(java.lang.String)

getInstanceVariableList

public java.util.List<Variable<IRubyObject>> getInstanceVariableList()
Specified by:
getInstanceVariableList in interface InstanceVariables
Returns:
instance variables
See Also:
InstanceVariables.getInstanceVariableList()

getInstanceVariableNameList

public java.util.List<java.lang.String> getInstanceVariableNameList()
Specified by:
getInstanceVariableNameList in interface InstanceVariables
Returns:
instance variable names
See Also:
InstanceVariables.getInstanceVariableNameList()

validateInstanceVariable

protected java.lang.String validateInstanceVariable(java.lang.String name)
Checks if the name parameter represents a legal instance variable name, and otherwise throws a Ruby NameError


ensureInstanceVariablesSettable

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


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(java.lang.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:
InternalVariables.hasInternalVariable(java.lang.String)

fastHasInternalVariable

public boolean fastHasInternalVariable(java.lang.String internedName)
Description copied from interface: InternalVariables
Returns true if object has the named internal variable. Use only for internal variables (not ivar/cvar/constant). The supplied name must have been previously interned.

Specified by:
fastHasInternalVariable in interface InternalVariables
Parameters:
internedName - the interned name of an internal variable
Returns:
true if object has the named internal variable, else false
See Also:
InternalVariables.fastHasInternalVariable(java.lang.String)

getInternalVariable

public IRubyObject getInternalVariable(java.lang.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:
InternalVariables.getInternalVariable(java.lang.String)

fastGetInternalVariable

public IRubyObject fastGetInternalVariable(java.lang.String internedName)
Description copied from interface: InternalVariables
Returns the named internal variable if present, else null. Use only for internal variables (not ivar/cvar/constant). The supplied name must have been previously interned.

Specified by:
fastGetInternalVariable in interface InternalVariables
Parameters:
internedName - the interned name of an internal variable
Returns:
he named internal variable if present, else null
See Also:
InternalVariables.fastGetInternalVariable(java.lang.String)

setInternalVariable

public void setInternalVariable(java.lang.String name,
                                IRubyObject 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:
InternalVariables.setInternalVariable(java.lang.String, org.jruby.runtime.builtin.IRubyObject)

fastSetInternalVariable

public void fastSetInternalVariable(java.lang.String internedName,
                                    IRubyObject value)
Description copied from interface: InternalVariables
Sets the named internal variable to the specified value. Use only for internal variables (not ivar/cvar/constant). The supplied name must have been previously interned.

Specified by:
fastSetInternalVariable in interface InternalVariables
Parameters:
internedName - the interned name of an internal variable
value - the value to be set
See Also:
InternalVariables.fastSetInternalVariable(java.lang.String, org.jruby.runtime.builtin.IRubyObject)

removeInternalVariable

public IRubyObject removeInternalVariable(java.lang.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:
InternalVariables.removeInternalVariable(java.lang.String)

syncVariables

public void syncVariables(java.util.List<Variable<IRubyObject>> variables)
Sync one variable table with another - this is used to make rbClone work correctly.

Specified by:
syncVariables in interface IRubyObject
Parameters:
variables - the variables to be set for object

getInternalVariableList

public java.util.List<Variable<IRubyObject>> getInternalVariableList()
Specified by:
getInternalVariableList in interface InternalVariables
Returns:
only internal variables (NOT ivar/cvar/constant)
See Also:
InternalVariables.getInternalVariableList()

hasVariables

public boolean hasVariables()
Returns true if object has any variables, defined as:

Specified by:
hasVariables in interface IRubyObject
Returns:
true if object has any variables, else false

getVariableCount

public int getVariableCount()
Returns the amount of instance variables, class variables, constants and internal variables this object has.

Specified by:
getVariableCount in interface IRubyObject
Returns:
the count of all variables (ivar/cvar/constant/internal)

getVariableList

public java.util.List<Variable<IRubyObject>> getVariableList()
Gets a list of all variables in this object.

Specified by:
getVariableList in interface IRubyObject
Returns:
a list of all variables (ivar/cvar/constant/internal)

getVariableNameList

public java.util.List<java.lang.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)

getVariableMap

@Deprecated
public java.util.Map getVariableMap()
Deprecated. 

Gets internal access to the getmap for variables.


isRubyVariable

protected static final boolean isRubyVariable(java.lang.String name)
Check the syntax of a Ruby variable, including that it's longer than zero characters, and starts with either an @ or a capital letter.


variableTableReadLocked

protected IRubyObject variableTableReadLocked(RubyObject.VariableTableEntry entry)
Reads the value of the specified entry, locked on the current object.


variableTableContains

protected boolean variableTableContains(java.lang.String name)
Checks if the variable table contains a variable of the specified name.


variableTableFastContains

protected boolean variableTableFastContains(java.lang.String internedName)
Checks if the variable table contains the the variable of the specified name, where the precondition is that the name must be an interned Java String.


variableTableFetch

protected IRubyObject variableTableFetch(java.lang.String name)
Fetch an object from the variable table based on the name.

Returns:
the object or null if not found

variableTableFastFetch

protected IRubyObject variableTableFastFetch(java.lang.String internedName)
Fetch an object from the variable table based on the name, where the name must be an interned Java String.

Returns:
the object or null if not found

variableTableStore

protected IRubyObject variableTableStore(java.lang.String name,
                                         IRubyObject value)
Store a value in the variable store under the specific name.


variableTableFastStore

protected IRubyObject variableTableFastStore(java.lang.String internedName,
                                             IRubyObject value)
Will store the value under the specified name, where the name needs to be an interned Java String.


variableTableRemove

protected IRubyObject variableTableRemove(java.lang.String name)
Removes the entry with the specified name from the variable table, and returning the removed value.


variableTableGetTable

protected RubyObject.VariableTableEntry[] variableTableGetTable()
Get the actual table used to save variable entries.


variableTableGetSize

protected int variableTableGetSize()
Get the size of the variable table.


variableTableSync

protected void variableTableSync(java.util.List<Variable<IRubyObject>> vars)
Synchronize the variable table with the argument. In real terms this means copy all entries into a newly allocated table.


variableTableRehash

protected final RubyObject.VariableTableEntry[] variableTableRehash()
Rehashes the variable table. Must be called from a synchronized block.


variableTableGetMap

protected java.util.Map variableTableGetMap()
Method to help ease transition to new variables implementation. Will likely be deprecated in the near future.


variableTableGetMap

protected java.util.Map variableTableGetMap(java.util.Map map)
Method to help ease transition to new variables implementation. Will likely be deprecated in the near future.



Copyright © 2002-2007 JRuby Team. All Rights Reserved.