The rationale for this was that weak tables wouldn't be purecopied, so it might be a good idea to inform the user about that beforhand. The simple NILP (obj->weak) check in purecopy is much easier and wouldn't generate errors, I'll switch to that instead.
Alright then, I'll push this to master after adding some more documentation.
Other functions in alloc.c that perform pure allocation for different objects are named in the same way (make_pure_string, make_pure_vector), so I merely followed this convention.