public static Cons yieldContextSensitiveSlotValueSetterTree(StorageSlot slot, Stella_Object objectref, Stella_Object valueref, StandardObject returntype, Cons csoptions, Object [] MV_returnarray) {
    { boolean contextsensitiveP = !((csoptions != null) &&
          (Cons.searchPlist(csoptions, Stella.KWD_CONTEXT_SENSITIVEp) == Stella.SYM_STELLA_FALSE));
      Symbol copytochildren = (((csoptions != null) &&
          (Cons.searchPlist(csoptions, Stella.KWD_COPY_TO_CHILDRENp) == Stella.SYM_STELLA_TRUE)) ? Stella.SYM_STELLA_TRUE : Stella.SYM_STELLA_FALSE);
      Surrogate realbasetype = slot.slotBaseType;
      CompoundTypeSpecifier realtypespec = ((CompoundTypeSpecifier)(KeyValueList.dynamicSlotValue(slot.dynamicSlots, Stella.SYM_STELLA_SLOT_TYPE_SPECIFIER, null)));
      Symbol objectvar = null;
      Symbol valuevar = null;
      Symbol oldvaluevar = null;
      Symbol newvaluevar = null;
      Cons oldvaluetree = null;
      Cons setnewvaluetree = null;

      slot.slotBaseType = Stella.SGT_STELLA_OBJECT;
      if (realtypespec != null) {
        KeyValueList.setDynamicSlotValue(slot.dynamicSlots, Stella.SYM_STELLA_SLOT_TYPE_SPECIFIER, null, null);
      }
      slot.slotContextSensitiveP = false;
      if (contextsensitiveP) {
        objectvar = Stella.localGensym("OBJECT");
        valuevar = Stella.localGensym("VALUE");
        oldvaluevar = Stella.localGensym("OLD-VALUE");
        newvaluevar = Stella.localGensym("NEW-VALUE");
        Symbol.pushVariableBinding(objectvar, slot.slotOwner);
        Symbol.pushVariableBinding(newvaluevar, Stella.SGT_STELLA_OBJECT);
        oldvaluetree = Stella_Object.sysTree(Stella_Object.walkWithoutTypeTree(Cons.list$(Cons.cons(Stella.SYM_STELLA_SLOT_VALUE, Cons.cons(objectvar, Cons.cons(Cons.cons(slot.slotName, Stella.NIL), Stella.NIL))))), Stella.SGT_STELLA_OBJECT, new Object[1]);
        setnewvaluetree = Stella_Object.sysTree(Stella_Object.walkWithoutTypeTree(Cons.list$(Cons.cons(Stella.SYM_STELLA_SETF, Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_SLOT_VALUE, Cons.cons(objectvar, Cons.cons(Cons.cons(slot.slotName, Stella.NIL), Stella.NIL)))), Cons.cons(newvaluevar, Cons.cons(Stella.NIL, Stella.NIL)))))), Stella.SGT_STELLA_OBJECT, new Object[1]);
      }
      else {
        setnewvaluetree = Stella_Object.sysTree(Stella_Object.walkWithoutTypeTree(Cons.list$(Cons.cons(Stella.SYM_STELLA_SETF, Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_SLOT_VALUE, Cons.cons(objectref, Cons.cons(Cons.cons(slot.slotName, Stella.NIL), Stella.NIL)))), Cons.cons(valueref, Cons.cons(Stella.NIL, Stella.NIL)))))), Stella.SGT_STELLA_OBJECT, new Object[1]);
      }
      slot.slotBaseType = realbasetype;
      if (realtypespec != null) {
        KeyValueList.setDynamicSlotValue(slot.dynamicSlots, Stella.SYM_STELLA_SLOT_TYPE_SPECIFIER, realtypespec, null);
      }
      slot.slotContextSensitiveP = true;
      if (!contextsensitiveP) {
        { Cons _return_temp = setnewvaluetree;

          MV_returnarray[0] = Stella.SGT_STELLA_OBJECT;
          return (_return_temp);
        }
      }
      Stella.popVariableBinding();
      Stella.popVariableBinding();
      { Cons _return_temp = Cons.list$(Cons.cons(Stella.SYM_STELLA_VRLET, Cons.cons(Cons.list$(Cons.cons(Cons.cons(objectvar, Cons.cons(objectref, Stella.NIL)), Cons.cons(Cons.cons(valuevar, Cons.cons(realbasetype, Cons.cons(valueref, Stella.NIL))), Cons.cons(Cons.cons(oldvaluevar, Cons.cons(oldvaluetree, Stella.NIL)), Cons.cons(Cons.cons(newvaluevar, Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_UPDATE_IN_CONTEXT, Cons.cons(oldvaluevar, Cons.cons(Cons.cons(valuevar, Cons.list$(Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_HOME_CONTEXT, Cons.cons(objectvar, Cons.cons(Stella.NIL, Stella.NIL)))), Cons.cons(copytochildren, Cons.cons(Stella.NIL, Stella.NIL))))), Stella.NIL)))), Stella.NIL)), Cons.cons(Stella.NIL, Stella.NIL)))))), Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_WHEN, Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_NOT, Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_CS_VALUEp, Cons.cons(oldvaluevar, Cons.cons(Stella.NIL, Stella.NIL)))), Cons.cons(Stella.NIL, Stella.NIL)))), Cons.cons(setnewvaluetree, Cons.cons(Stella.NIL, Stella.NIL))))), Cons.cons(valuevar, Cons.cons(Stella.NIL, Stella.NIL))))));

        MV_returnarray[0] = returntype;
        return (_return_temp);
      }
    }
  }