Skip to content
Snippets Groups Projects
Commit ae2efefd authored by Lukas Stadler's avatar Lukas Stadler
Browse files

cache in RBuiltinPackage.getRFiles (speeds up context creation)

parent d3feecab
No related branches found
No related tags found
No related merge requests found
...@@ -26,6 +26,7 @@ import java.util.ArrayList; ...@@ -26,6 +26,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import com.oracle.truffle.api.frame.MaterializedFrame; import com.oracle.truffle.api.frame.MaterializedFrame;
...@@ -100,13 +101,19 @@ public abstract class RBuiltinPackage { ...@@ -100,13 +101,19 @@ public abstract class RBuiltinPackage {
return name; return name;
} }
private static final ConcurrentHashMap<String, String[]> rFilesCache = new ConcurrentHashMap<>();
/** /**
* Get a list of R override files for package {@code pkgName}, from the {@code pkgName/R} * Get a list of R override files for package {@code pkgName}, from the {@code pkgName/R}
* subdirectory. * subdirectory.
*/ */
public static ArrayList<Source> getRFiles(String pkgName) { public static ArrayList<Source> getRFiles(String pkgName) {
ArrayList<Source> componentList = new ArrayList<>(); ArrayList<Source> componentList = new ArrayList<>();
String[] rFileContents = ResourceHandlerFactory.getHandler().getRFiles(RBuiltinPackage.class, pkgName); String[] rFileContents = rFilesCache.get(pkgName);
if (rFileContents == null) {
rFileContents = ResourceHandlerFactory.getHandler().getRFiles(RBuiltinPackage.class, pkgName);
rFilesCache.put(pkgName, rFileContents);
}
for (String rFileContent : rFileContents) { for (String rFileContent : rFileContents) {
Source content = RSource.fromTextInternal(rFileContent, RSource.Internal.R_IMPL); Source content = RSource.fromTextInternal(rFileContent, RSource.Internal.R_IMPL);
componentList.add(content); componentList.add(content);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment