# verbing properties (Bb's call)

Jefferson M. Dubrule (Jefferson.M.Dubrule@dartmouth.edu)
Sat, 6 Apr 1996 10:36:03 PST

- Messages sorted by:[ date ][ thread ][ subject ][ author ]

    This is from a while back . . .
    --- Seth I. Rich wrote:
    But this seems a good opportunity to spin out another entry from my
    `wish list':

      function property_value(OBJ object, STR property-name)
      Returns <object>.<property-name>, if it exists and is readable
      with the programmer's permissions, else returns E_PERM or
      E_PROPNF or E_INVIND as appropriate.  Handles built-in properties
      the same way as in-DB properties, taking $server_options into
      account as relevant.

      function set_property_value(OBJ object, STR property-name, value)
      Sets <object>.<property-name> to <value>, if it exists and is
      writable with the programmer's permissions, else returns E_PERM
      or E_PROPNF or E_INVIND as appropriate.  Handles built-in
      properties intelligently.  (Yes, by setting obj.prop to a false
      value this function will return a false value; that's up to the
      programmer to verify.  In general checking for equality to <value>
      should suffice as an error check.)

      For all verbcode references of the form
        <object>.<property-name> = <value>
      the server will silently, and without modifying the user's verb
      code, call set_property_value and raise/return the response.

      Similarly, for all references to
        <object>.<property-name>
      which attempt to access the property's value, the server will
      silently call property_value.
    --- end of quoted material ---

    If you want this, Patrick and I already have property_full() and
    set_property_full implemented, tested, and working.  A few minor
    modifications on your part to eliminate the permissions and owner
    returns will turn it into what you are looking for (they even
    handle built-ins)
    As for the other thing, we will finish the modifications to execute.c
    to replace obj.prop = quack with obj:_set_prop(quack) and obj.prop
    with obj:_get_prop().  It would probably be pretty easy to change
    this to what you want.

    -manta