public static Stella_Object symbolPropertySetter(Symbol symbol, Stella_Object value, StandardObject key) {
    { Cons vplist = symbol.symbolValueAndPlist;
      Cons plist = vplist.rest;

      while (!(plist == Stella.NIL)) {
        if (plist.value == key) {
          if (value != null) {
            plist.rest.value = value;
          }
          else if (!(plist.rest.rest == Stella.NIL)) {
            { Cons restplist = plist.rest;

              plist.value = restplist.rest.value;
              plist.rest = restplist.rest.rest;
            }
          }
          else if (plist == vplist.rest) {
            vplist.rest = Stella.NIL;
          }
          else {
            plist.rest.value = value;
          }
          return (value);
        }
        plist = plist.rest.rest;
      }
      if (value != null) {
        if (vplist == Stella.NIL) {
          vplist = Cons.cons(null, Stella.NIL);
          symbol.symbolValueAndPlist = vplist;
        }
        vplist.rest = Cons.cons(key, Cons.cons(value, vplist.rest));
      }
      return (value);
    }
  }