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.
STD's EXPR hard-codes a check against the precedence level, which we shouldn't do here as EXPR is meant to be generic.
Not completely sure why that can happen just yet, but this should be enough to make it not be a problem.
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.
Also means that a workaround can be eliminated.
Means we'll be able to support user-picked stoppers in Rakudo. Should also deal with some over-eager backtracking bugs leading to bad errors. No NQP test regressions with this, but may well bust non-Q Rakudo, so in a branch for now.
This avoids re-transcoding every single time we switch language, and fixes the memory use regression in rakudo/Q.
This may get rid of some of the oddness we've seen with strings with null bytes showing up. Also means we can pass arguments on to a rule in another language.
Seems this path never got exercised in NQP before.
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.
The runtime mixin case worked, but curiously not the compile time one.
This means we can do them in a way that doesn't end up with different NQP bootstrap layers ending up linked.
If you're building a QAST tree up, QAST::Var is just fine. But for lookups where we don't know what we want until runtime, or to write in NQP code, these are useful.
This in turn means PASTRegex - the library the remaining .pir cheats were placed into - can now also go away. This means we have no .pir files in the NQP repository, apart from the generated-from-NQP stage0.
Logic re-written in terms of the new nqp:: ops.