From ec96db2f47eefa4028523c9133237c5c1d3febfb Mon Sep 17 00:00:00 2001 From: stepan <stepan.sindelar@oracle.com> Date: Wed, 3 Jan 2018 14:48:19 +0100 Subject: [PATCH] Fix unsupported specialization with string vector in getSymbolInfo --- .../truffle/r/nodes/builtin/base/DynLoadFunctions.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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 d0dce21f30..69aa2aa2e3 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,6 +22,8 @@ */ 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; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.size; @@ -169,14 +171,15 @@ public class DynLoadFunctions { static { Casts casts = new Casts(GetSymbolInfo.class); casts.arg("symbol").mustBe(stringValue()).asStringVector().mustBe(notEmpty()).findFirst(); + casts.arg("package").defaultError(RError.Message.REQUIRES_NAME_DLLINFO).returnIf(instanceOf(RExternalPtr.class)).mustBe(stringValue()).asStringVector().findFirst(); casts.arg("withRegistrationInfo").mustBe(logicalValue()).asLogicalVector().findFirst().map(toBoolean()); } @Specialization @TruffleBoundary - protected Object getSymbolInfo(String symbol, String packageName, boolean withReg) { + protected Object getSymbolInfo(String symbol, RAbstractStringVector packageName, boolean withReg) { DLL.RegisteredNativeSymbol rns = DLL.RegisteredNativeSymbol.any(); - DLL.SymbolHandle f = findSymbolNode.execute(RRuntime.asString(symbol), packageName, rns); + DLL.SymbolHandle f = findSymbolNode.execute(RRuntime.asString(symbol), packageName.getDataAt(0), rns); SymbolInfo symbolInfo = null; if (f != DLL.SYMBOL_NOT_FOUND) { symbolInfo = new SymbolInfo(rns.getDllInfo(), symbol, f); -- GitLab