Next: Argument Resolution, Previous: Setting Dictionary Values, Up: Dictionaries [Index]

### 6.3 Compound Dictionary Values

If you want to associate a non-string value with a dictionary variable, then you will need to use a compound value. Compound dictionary values are derived using EIEIO from a base class for handling arbitrary data in a macro.

Type: srecode-dictionary-compound-value

  A compound dictionary value. Values stored in a dictionary must be a string, a dictionary for showing sections, or an instance of a subclass of this class.

  Compound dictionary values derive from this class, and must provide a sequence of method implementations to convert into a string.

Your new subclass of the compound value needs to implement these methods:

Function: srecode-compound-toString cp function dictionary

  Convert the compound dictionary value cp to a string. If function is non-`nil`, then function is somehow applied to an aspect of the compound value. The function could be a fraction of some function symbol with a logical prefix excluded.

The next method is for dumping out tables during debugging.

Function: srecode-dump cp &optional indent

  Display information about this compound value.

Here is an example of wrapping a semantic tag in a compound value:

    (defclass srecode-semantic-tag (srecode-dictionary-compound-value)
      ((prime :initarg :prime
              :type semantic-tag
              :documentation
              "This is the primary insertion tag.")
       )
      "Wrap up a collection of semantic tag information.
    This class will be used to derive dictionary values.")

    (defmethod srecode-compound-toString((cp srecode-semantic-tag)
                                         function
                                         dictionary)
      "Convert the compound dictionary value CP to a string.
    If FUNCTION is non-nil, then FUNCTION is somehow applied to an
    aspect of the compound value."
      (if (not function)
          ;; Just format it in some handy dandy way.
          (semantic-format-tag-prototype (oref cp :prime))
        ;; Otherwise, apply the function to the tag itself.
        (funcall function (oref cp :prime))
        ))

Next: Argument Resolution, Previous: Setting Dictionary Values, Up: Dictionaries [Index]