* @return the previous value associated with <tt>key</tt>, or
* <tt>null</tt> if there was no mapping for <tt>key</tt>.
*/
public V put (Object receiver, K key, V value) {
checkKey(key);
RubyObject robj = getReceiverObject(receiver);
String name = ((String)key).intern();
BiVariable v = getVariable(robj, name);
Object oldValue = null;
if (v != null) {
// updates
oldValue = v.getJavaObject();
v.setJavaObject(robj.getRuntime(), value);
} else {
// creates new value
v = VariableInterceptor.getVariableInstance(provider.getLocalVariableBehavior(), robj, name, value);
if (v != null) {
update(name, v);