Skip to content
Snippets Groups Projects
Commit 9f01957e authored by Florian Angerer's avatar Florian Angerer
Browse files

Fix: Allow 'NULL' as enclosing env during deserialization.

parent 995f2f6a
Branches
No related tags found
No related merge requests found
...@@ -585,8 +585,12 @@ public class RSerialize { ...@@ -585,8 +585,12 @@ public class RSerialize {
} }
Debug.printClosure(pairList); 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) { if (attrItem != RNull.instance) {
setAttributes(func, attrItem); setAttributes(func, attrItem);
handleFunctionSrcrefAttr(func); handleFunctionSrcrefAttr(func);
...@@ -2786,6 +2790,10 @@ public class RSerialize { ...@@ -2786,6 +2790,10 @@ public class RSerialize {
* @return {@code true} if a path has been added, {@code false} otherwise. * @return {@code true} if a path has been added, {@code false} otherwise.
*/ */
private static boolean setupLibPath(REnvironment environment) { private static boolean setupLibPath(REnvironment environment) {
if (environment == REnvironment.baseEnv()) {
return false;
}
REnvironment cur = environment; REnvironment cur = environment;
while (cur != REnvironment.emptyEnv() && !cur.isNamespaceEnv()) { while (cur != REnvironment.emptyEnv() && !cur.isNamespaceEnv()) {
cur = cur.getParent(); cur = cur.getParent();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment