From adf0bf748290244796dff38f5ad76079d5028543 Mon Sep 17 00:00:00 2001 From: Florian Angerer <florian.angerer@oracle.com> Date: Mon, 22 Jan 2018 13:06:27 +0100 Subject: [PATCH] Add node for 'eSoftVersion'. --- .../r/nodes/builtin/base/BasePackage.java | 1 + .../nodes/builtin/base/DynLoadFunctions.java | 33 ++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java index 0a3cf0343b..0544dabb50 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java @@ -395,6 +395,7 @@ public class BasePackage extends RBuiltinPackage { add(DynLoadFunctions.GetLoadedDLLs.class, DynLoadFunctionsFactory.GetLoadedDLLsNodeGen::create); add(DynLoadFunctions.GetSymbolInfo.class, DynLoadFunctionsFactory.GetSymbolInfoNodeGen::create); add(DynLoadFunctions.IsLoaded.class, DynLoadFunctionsFactory.IsLoadedNodeGen::create); + add(DynLoadFunctions.ExtSoftVersion.class, DynLoadFunctionsFactory.ExtSoftVersionNodeGen::create); add(EncodeString.class, EncodeStringNodeGen::create); add(EncodingFunctions.Encoding.class, EncodingFunctionsFactory.EncodingNodeGen::create); add(EncodingFunctions.SetEncoding.class, EncodingFunctionsFactory.SetEncodingNodeGen::create); diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DynLoadFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DynLoadFunctions.java index b872653b28..8eebeae3cd 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DynLoadFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DynLoadFunctions.java @@ -22,7 +22,6 @@ */ package com.oracle.truffle.r.nodes.builtin.base; -import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.asStringVector; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.instanceOf; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.logicalValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.notEmpty; @@ -35,6 +34,8 @@ import static com.oracle.truffle.r.runtime.builtins.RBehavior.READS_STATE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Cached; @@ -48,6 +49,7 @@ import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RExternalPtr; import com.oracle.truffle.r.runtime.data.RList; import com.oracle.truffle.r.runtime.data.RNull; +import com.oracle.truffle.r.runtime.data.RStringVector; import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; import com.oracle.truffle.r.runtime.ffi.DLL; import com.oracle.truffle.r.runtime.ffi.DLL.DLLException; @@ -218,4 +220,33 @@ public class DynLoadFunctions { return DLL.isDLLInfo(externalPtr); } } + + @RBuiltin(name = "eSoftVersion", kind = INTERNAL, parameterNames = {}, behavior = READS_STATE) + public abstract static class ExtSoftVersion extends RBuiltinNode.Arg0 { + + static { + Casts.noCasts(ExtSoftVersion.class); + } + + @Specialization + @TruffleBoundary + protected RStringVector getSymbolInfo() { + String[] data = new String[]{"zlib", "bzlib", "xz", "PCRE", "ICU", "TRE", "iconv"}; + RStringVector names = RDataFactory.createStringVector(data, true); + + Map<String, String> versionFunctionTable = new HashMap<>(); + versionFunctionTable.put("zlib", "zlibVersion"); + versionFunctionTable.put("bzlib", "BZ2_bzlibVersion"); + versionFunctionTable.put("xz", "lzma_version_string"); + versionFunctionTable.put("PCRE", "pcre_version"); + versionFunctionTable.put("TRE", "tre_version"); + + // TODO + + // ICU -> empty + // TRE mandatory + // iconv -> unknown + return RDataFactory.createStringVector(0); + } + } } -- GitLab