Package org.jruby.runtime.ivars
Class SynchronizedVariableAccessor
java.lang.Object
org.jruby.runtime.ivars.VariableAccessor
org.jruby.runtime.ivars.SynchronizedVariableAccessor
A VariableAccessor that uses synchronization to ensure the variable table
is updated safely.
-
Field Summary
Fields inherited from class org.jruby.runtime.ivars.VariableAccessor
classId, DUMMY_ACCESSOR, index, name, realClass -
Constructor Summary
ConstructorsConstructorDescriptionSynchronizedVariableAccessor(RubyClass realClass, String name, int index, int classId) Construct a new SynchronizedVariableAccessor for the given "real" class, variable name, variable index, and class ID. -
Method Summary
Modifier and TypeMethodDescriptionprivate static Object[]createTable(RubyBasicObject self, RubyClass realClass) Create a new table for the given object sufficient in size to accommodate all known variables.private static Object[]ensureTable(RubyBasicObject self, RubyClass realClass, int index) Ensure the variable table is ready to receive the given variable index.private static Object[]growTable(RubyBasicObject self, RubyClass realClass, Object[] currentTable) Grow an existing table to accommodate all known variables.voidSet this variable into the given object using synchronization to ensure safe updating of the variable table.static voidsetVariable(RubyBasicObject self, RubyClass realClass, int index, Object value) Set the given variable index into the specified object.static voidsetVariableChecked(RubyBasicObject self, RubyClass realClass, int index, Object value) Set the given variable index into the specified object.Methods inherited from class org.jruby.runtime.ivars.VariableAccessor
get, getClassId, getIndex, getName, getVariable, toString, verify
-
Constructor Details
-
SynchronizedVariableAccessor
Construct a new SynchronizedVariableAccessor for the given "real" class, variable name, variable index, and class ID.- Parameters:
realClass- the "real" classname- the variable's nameindex- the variable's indexclassId- the class's ID
-
-
Method Details
-
set
Set this variable into the given object using synchronization to ensure safe updating of the variable table.- Overrides:
setin classVariableAccessor- Parameters:
object- the object into which to set this variablevalue- the variable's value
-
setVariableChecked
public static void setVariableChecked(RubyBasicObject self, RubyClass realClass, int index, Object value) Set the given variable index into the specified object. The "real" class and index are pass in to provide functional access. This version checks if self has been frozen before proceeding to set the variable.- Parameters:
self- the object into which to set the variablerealClass- the "real" class for the objectindex- the index of the variablevalue- the variable's value
-
setVariable
Set the given variable index into the specified object. The "real" class and index are pass in to provide functional access.- Parameters:
self- the object into which to set the variablerealClass- the "real" class for the objectindex- the index of the variablevalue- the variable's value
-
ensureTable
Ensure the variable table is ready to receive the given variable index.- Parameters:
self- the object that holds the variable tablerealClass- the "real" class of the objectindex- the variable's index- Returns:
- the variable table, prepared to set the given index
-
createTable
Create a new table for the given object sufficient in size to accommodate all known variables.- Parameters:
self- the object to hold the tablerealClass- the "real" class for the object- Returns:
- the newly-created table
-
growTable
Grow an existing table to accommodate all known variables.- Parameters:
self- the object to hold the tablerealClass- the "real" class for the objectcurrentTable- the current table- Returns:
- the expanded table
-