Skip to content
Snippets Groups Projects
Commit 62bdfb26 authored by Adam Welc's avatar Adam Welc
Browse files

Rewritten parameter casts for readRenviron builtin.

parent 36a1af51
Branches
No related tags found
No related merge requests found
......@@ -22,6 +22,7 @@
*/
package com.oracle.truffle.r.nodes.builtin.base;
import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.*;
import static com.oracle.truffle.r.runtime.RVisibility.OFF;
import static com.oracle.truffle.r.runtime.builtins.RBehavior.COMPLEX;
import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL;
......@@ -30,23 +31,25 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.dsl.Fallback;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.r.nodes.builtin.CastBuilder;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.runtime.RError;
import com.oracle.truffle.r.runtime.RRuntime;
import com.oracle.truffle.r.runtime.Utils;
import com.oracle.truffle.r.runtime.builtins.RBuiltin;
import com.oracle.truffle.r.runtime.context.RContext;
import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector;
@RBuiltin(name = "readRenviron", visibility = OFF, kind = INTERNAL, parameterNames = "path", behavior = COMPLEX)
@RBuiltin(name = "readRenviron", visibility = OFF, kind = INTERNAL, parameterNames = "x", behavior = COMPLEX)
public abstract class ReadREnviron extends RBuiltinNode {
@Specialization(guards = "lengthOneCVector(vec)")
@Override
protected void createCasts(CastBuilder casts) {
casts.arg("x").mustBe(scalarStringValue(), RError.SHOW_CALLER, RError.Message.ARGUMENT_MUST_BE_STRING, "x");
}
@TruffleBoundary
protected Object doReadEnviron(RAbstractStringVector vec) {
String path = Utils.tildeExpand(vec.getDataAt(0));
@Specialization
protected Object doReadEnviron(String path) {
byte result = RRuntime.LOGICAL_TRUE;
try {
RContext.getInstance().stateREnvVars.readEnvironFile(path);
......@@ -59,12 +62,4 @@ public abstract class ReadREnviron extends RBuiltinNode {
return result;
}
@Fallback
protected Object doReadEnviron(@SuppressWarnings("unused") Object vec) {
throw RError.error(this, RError.Message.ARGUMENT_MUST_BE_STRING, "x");
}
protected static boolean lengthOneCVector(RAbstractStringVector vec) {
return vec.getLength() == 1;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment