From b8e83a9483f93964640f670e841a2feddd93636c Mon Sep 17 00:00:00 2001 From: Florian Angerer <florian.angerer@oracle.com> Date: Wed, 25 Oct 2017 18:22:18 +0200 Subject: [PATCH] Fix: Regenerate language closure from list. --- .../com/oracle/truffle/r/nodes/RASTUtils.java | 3 +-- .../truffle/r/runtime/data/RLanguage.java | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java index 595323f56d..f8c5cfe98d 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java @@ -145,8 +145,7 @@ public final class RASTUtils { return RDataFactory.createSymbol(id); } else { assert element instanceof RSyntaxCall || element instanceof RSyntaxFunction; - Closure closure = RContext.getInstance().languageClosureCache.getOrCreateLanguageClosure(((RSyntaxNode) element).asRNode()); - return RDataFactory.createLanguage(closure); + return RDataFactory.createLanguage(Closure.createLanguageClosure(((RSyntaxNode) element).asRNode())); } } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLanguage.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLanguage.java index 7e7ac0239f..7fa8714d7a 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLanguage.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLanguage.java @@ -87,11 +87,7 @@ public final class RLanguage extends RSharingAttributeStorage implements RAbstra return RContext.getRRuntimeASTAccess().createLanguageFromList(l, type); } - public Closure getClosure() { - return closure; - } - - public RBaseNode getRep() { + private void regenerateFromList() { if (list != null) { // we could rest rep but we keep it around to remember type of the language object assert closure.getExpr() != null; @@ -99,10 +95,20 @@ public final class RLanguage extends RSharingAttributeStorage implements RAbstra RPairList oldList = this.list; this.list = null; RLanguage newLang = (RLanguage) fromList(oldList, RContext.getRRuntimeASTAccess().getRepType(this)); - this.closure = newLang.getClosure(); + assert newLang.list == null; + this.closure = newLang.closure; this.length = newLang.length; this.attributes = newLang.attributes; } + } + + public Closure getClosure() { + regenerateFromList(); + return closure; + } + + public RBaseNode getRep() { + regenerateFromList(); return closure.getExpr(); } -- GitLab