Skip to content
Snippets Groups Projects
Commit d029b538 authored by stepan's avatar stepan
Browse files

Change RFFI variable R_MissingArg to be an empty symbol

parent df972ac9
No related branches found
No related tags found
No related merge requests found
......@@ -28,8 +28,8 @@ import com.oracle.truffle.r.runtime.TempPathName;
import com.oracle.truffle.r.runtime.context.RContext;
import com.oracle.truffle.r.runtime.data.CharSXPWrapper;
import com.oracle.truffle.r.runtime.data.RDataFactory;
import com.oracle.truffle.r.runtime.data.RMissing;
import com.oracle.truffle.r.runtime.data.RNull;
import com.oracle.truffle.r.runtime.data.RSymbol;
import com.oracle.truffle.r.runtime.data.RUnboundValue;
import com.oracle.truffle.r.runtime.env.REnvironment;
......@@ -46,7 +46,7 @@ public enum RFFIVariables {
R_Interactive(0), // Set later
R_NilValue(RNull.instance),
R_UnboundValue(RUnboundValue.instance),
R_MissingArg(RMissing.instance),
R_MissingArg(RSymbol.MISSING),
R_EmptyEnv(REnvironment.emptyEnv()),
R_Srcref(null),
R_Bracket2Symbol(RDataFactory.createSymbol("[[")),
......
......@@ -261,3 +261,7 @@ rffi.test_R_nchar <- function(x) {
rffi.test_forceAndCall <- function(call, args, rho) {
.Call('test_forceAndCall', call, args, rho)
}
rffi.test_constantTypes <- function(env) {
.Call('test_constant_types')
}
......@@ -94,6 +94,7 @@ static const R_CallMethodDef CallEntries[] = {
CALLDEF(test_duplicate, 2),
CALLDEF(test_R_nchar, 1),
CALLDEF(test_forceAndCall, 3),
CALLDEF(test_constant_types, 0),
#include "init_api.h"
{NULL, NULL, 0}
};
......
......@@ -810,8 +810,59 @@ SEXP test_R_nchar(SEXP x) {
return resVec;
}
SEXP test_forceAndCall(SEXP e, SEXP n, SEXP rho)
{
SEXP test_forceAndCall(SEXP e, SEXP n, SEXP rho) {
SEXP val = R_forceAndCall(e, Rf_asInteger(n), rho);
return val;
}
SEXP test_constant_types() {
SEXP res = PROTECT(allocVector(INTSXP, 43));
int* data = INTEGER(res);
int i = 0;
data[i++] = TYPEOF(R_GlobalEnv);
data[i++] = TYPEOF(R_BaseEnv);
data[i++] = TYPEOF(R_BaseNamespace);
data[i++] = TYPEOF(R_NamespaceRegistry);
data[i++] = TYPEOF(R_NilValue);
data[i++] = -1; // TYPEOF(R_UnboundValue); TODO: this is 'mkSymMarker(R_NilValue)' in GNU-R
data[i++] = TYPEOF(R_MissingArg);
data[i++] = TYPEOF(R_EmptyEnv);
data[i++] = TYPEOF(R_Bracket2Symbol);
data[i++] = TYPEOF(R_BracketSymbol);
data[i++] = TYPEOF(R_BraceSymbol);
data[i++] = TYPEOF(R_DoubleColonSymbol);
data[i++] = TYPEOF(R_ClassSymbol);
data[i++] = TYPEOF(R_DeviceSymbol);
data[i++] = TYPEOF(R_DimNamesSymbol);
data[i++] = TYPEOF(R_DimSymbol);
data[i++] = TYPEOF(R_DollarSymbol);
data[i++] = TYPEOF(R_DotsSymbol);
data[i++] = TYPEOF(R_DropSymbol);
data[i++] = TYPEOF(R_LastvalueSymbol);
data[i++] = TYPEOF(R_LevelsSymbol);
data[i++] = TYPEOF(R_ModeSymbol);
data[i++] = TYPEOF(R_NameSymbol);
data[i++] = TYPEOF(R_NamesSymbol);
data[i++] = TYPEOF(R_NaRmSymbol);
data[i++] = TYPEOF(R_PackageSymbol);
data[i++] = TYPEOF(R_QuoteSymbol);
data[i++] = TYPEOF(R_RowNamesSymbol);
data[i++] = TYPEOF(R_SeedsSymbol);
data[i++] = TYPEOF(R_SourceSymbol);
data[i++] = TYPEOF(R_TspSymbol);
data[i++] = TYPEOF(R_dot_defined);
data[i++] = TYPEOF(R_dot_Method);
data[i++] = TYPEOF(R_dot_target);
data[i++] = TYPEOF(R_dot_packageName);
data[i++] = TYPEOF(R_dot_Generic);
data[i++] = TYPEOF(R_BlankString);
data[i++] = TYPEOF(R_BlankScalarString);
data[i++] = TYPEOF(R_BaseSymbol);
data[i++] = TYPEOF(R_NamespaceEnvSymbol);
data[i++] = TYPEOF(R_SortListSymbol);
data[i++] = TYPEOF(R_SpecSymbol);
data[i++] = TYPEOF(R_TripleColonSymbol);
data[i++] = TYPEOF(R_PreviousSymbol);
UNPROTECT(1);
return res;
}
......@@ -130,3 +130,5 @@ extern SEXP test_duplicate(SEXP, SEXP);
extern SEXP test_R_nchar(SEXP x);
extern SEXP test_forceAndCall(SEXP call, SEXP args, SEXP rho);
extern SEXP test_constant_types();
......@@ -323,6 +323,9 @@ api.Rf_isObject(x)
class(x) <- "c1"
api.Rf_isObject(x)
# prints R types of C constants like R_NamesSymbol
rffi.test_constantTypes()
# findVarInFrame for "..." that is empty gives symbol for missing, i.e. ""
foo <- function(...) rffi.findvar('...', environment())
typeof(foo())
......
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