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 595323f56d658ae8c66a99db43938e9b149dc1d9..f8c5cfe98d48a033d057efc83cdc2865c5c7625d 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 7e7ac0239fa4eeda84f436fb925526ead6417855..7fa8714d7a91980ce6aa176867b37e4e7bbedcef 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(); }