In parrot 4.4.0 enum_class_Proxy isnt defined but PARROT_HAS_THREADS is. So enum_class_Proxy would be added to the condition.
Tadzik came up with an abnormal testcase, which crashed in nqp on a threaded parrot. See [parrot #869]. Parrot_NQPLexPad_set_pointer needs to check for enum_class_Proxy also. Note this commit does not fix the problem, only the segfault. I do not know which lexinfo name_map to get with enum_class_Proxy.
This allows a language where such issues may arise to provide its own handler for them. If it doesn't, we just flag up the error as before.
If two pre-compiled modules both tried to replace an object or STable with their own updated view of it, the latest one would always just win. This creates the "disappearing symbol" issue. This patch detects that it's going on and complains, rather than leaving a weird failure later on (the actual fix will be to replace the exception thrown with a hook to allow the module loader to do some smarter merging). Breaks no NQP tests or Rakudo spectests; does correctly pick up the RT#112626 case.
A node without children can make do with the pir::repr_clone__PP call that was already there. But those that use the array of children need that cloned too, so we do self.shallow_clone(); This ought to fix a number of weird quasi-related behaviors we've seen in Rakudo.