From 9f01957eadb388345deda9f4d975c98074494753 Mon Sep 17 00:00:00 2001 From: Florian Angerer <florian.angerer@oracle.com> Date: Fri, 20 Oct 2017 13:03:23 +0200 Subject: [PATCH] Fix: Allow 'NULL' as enclosing env during deserialization. --- .../src/com/oracle/truffle/r/runtime/RSerialize.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java index 291db3b4e6..e9eab41082 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java @@ -585,8 +585,12 @@ public class RSerialize { } Debug.printClosure(pairList); } - boolean restore = setupLibPath((REnvironment) tagItem); - RFunction func = PairlistDeserializer.processFunction(carItem, cdrItem, (REnvironment) tagItem, currentFunctionName, packageName); + + // older versions of GnuR allowed 'NULL' + assert tagItem == RNull.instance || tagItem instanceof REnvironment; + REnvironment enclosingEnv = tagItem == RNull.instance ? REnvironment.baseEnv() : (REnvironment) tagItem; + boolean restore = setupLibPath(enclosingEnv); + RFunction func = PairlistDeserializer.processFunction(carItem, cdrItem, enclosingEnv, currentFunctionName, packageName); if (attrItem != RNull.instance) { setAttributes(func, attrItem); handleFunctionSrcrefAttr(func); @@ -2786,6 +2790,10 @@ public class RSerialize { * @return {@code true} if a path has been added, {@code false} otherwise. */ private static boolean setupLibPath(REnvironment environment) { + if (environment == REnvironment.baseEnv()) { + return false; + } + REnvironment cur = environment; while (cur != REnvironment.emptyEnv() && !cur.isNamespaceEnv()) { cur = cur.getParent(); -- GitLab