Consider:
typedef struct Memoize
{
     Plan        plan;
     int         numKeys;        /* size of the two arrays below */
     Oid        *hashOperators;  /* hash operators for each key */
     Oid        *collations;     /* cache keys */
     List       *param_exprs;    /* exprs containing parameters */
     ...
I think the comment "cache keys" is weird here.  Maybe it was copied from
typedef struct MemoizePath
{
     Path        path;
     Path       *subpath;        /* outerpath to cache tuples from */
     List       *hash_operators; /* hash operators for each key */
     List       *param_exprs;    /* cache keys */
     ...
but it's attached to a different field there.
Is this a mistake, or could this be clarified?