unsigned RvalHash(Rval rval, unsigned seed, unsigned max) { switch (rval.type) { case RVAL_TYPE_SCALAR: return StringHash(RvalScalarValue(rval), seed, max); case RVAL_TYPE_FNCALL: return FnCallHash(RvalFnCallValue(rval), seed, max); case RVAL_TYPE_LIST: return RlistHash(RvalRlistValue(rval), seed, max); case RVAL_TYPE_NOPROMISEE: return (seed + 1) % max; default: ProgrammingError("Unhandled case in switch: %d", rval.type); } }
unsigned RvalHash(Rval rval, unsigned seed) { switch (rval.type) { case RVAL_TYPE_SCALAR: return StringHash(RvalScalarValue(rval), seed); case RVAL_TYPE_FNCALL: return FnCallHash(RvalFnCallValue(rval), seed); case RVAL_TYPE_LIST: return RlistHash(RvalRlistValue(rval), seed); case RVAL_TYPE_NOPROMISEE: /* TODO modulus operation is biasing results. */ return (seed + 1); default: ProgrammingError("Unhandled case in switch: %d", rval.type); } }