diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Call.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Call.java index c120b6fc7d1b9c7fdb3f264d916ed611cbbe86e4..9b76276804be7dacb87f9e4d2d16712eea905654 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Call.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Call.java @@ -79,7 +79,6 @@ class TruffleLLVM_Call implements CallRFFI { } private enum INIT_VAR_FUN { - OBJ, DOUBLE, INT; @@ -100,6 +99,8 @@ class TruffleLLVM_Call implements CallRFFI { Node executeNode = Message.createExecute(2).createNode(); RFFIVariables[] variables = RFFIVariables.initialize(); for (int i = 0; i < variables.length; i++) { + // The TruffleObject instances are not passed down as + // they cannot be stored in memory at the moment RFFIVariables var = variables[i]; Object value = var.getValue(); if (value == null) { @@ -110,10 +111,6 @@ class TruffleLLVM_Call implements CallRFFI { ForeignAccess.sendExecute(executeNode, INIT_VAR_FUN.DOUBLE.symbolHandle.asTruffleObject(), i, value); } else if (value instanceof Integer) { ForeignAccess.sendExecute(executeNode, INIT_VAR_FUN.INT.symbolHandle.asTruffleObject(), i, value); - } else { - // TODO - // ForeignAccess.sendExecute(executeNode, frame, - // INIT_VAR_FUN.OBJ.symbolHandle.asTruffleObject(), i, value); } } catch (Throwable t) { throw RInternalError.shouldNotReachHere(t); diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_DLL.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_DLL.java index 3137ffd0abb16599f00e23643b2709ec1ff5e785..13eeb36eb0f4fcbb7ef9a53834e35b2d4e477ae8 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_DLL.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_DLL.java @@ -233,7 +233,7 @@ class TruffleLLVM_DLL extends JNI_DLL implements DLLRFFI { private static class TruffleLLVM_DLSymNode extends JNI_DLSymNode { @Override - public SymbolHandle execute(Object handle, String symbol) { + public SymbolHandle execute(Object handle, String symbol) throws UnsatisfiedLinkError { if (handle instanceof LLVM_Handle) { // If the symbol exists it will be in the map ParseStatus parseStatus = getContextState().parseStatusMap.get(symbol); @@ -247,7 +247,7 @@ class TruffleLLVM_DLL extends JNI_DLL implements DLLRFFI { return new SymbolHandle(symValue); } else { // symbol not found (or not in requested library) - return null; + throw new UnsatisfiedLinkError(); } } else { return super.execute(handle, symbol); diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_UpCallsRFFIImpl.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_UpCallsRFFIImpl.java index a772cd62ca08f428c0193d2da389b3f633f744eb..ba772aadafd1ae5e92c821eaa469420bf0f711e6 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_UpCallsRFFIImpl.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_UpCallsRFFIImpl.java @@ -44,12 +44,13 @@ import com.oracle.truffle.r.runtime.data.RScalar; import com.oracle.truffle.r.runtime.data.RTypedValue; import com.oracle.truffle.r.runtime.data.RUnboundValue; import com.oracle.truffle.r.runtime.ffi.CharSXPWrapper; +import com.oracle.truffle.r.runtime.ffi.RFFIVariables; /** * (Incomplete) Variant of {@link UpCallsRFFIImpl} for Truffle LLVM. * */ -public class TruffleLLVM_UpCallsRFFIImpl extends UpCallsRFFIImpl { +public class TruffleLLVM_UpCallsRFFIImpl extends UpCallsRFFIImpl implements VariableUpCallsRFFI { private static TruffleLLVM_UpCallsRFFIImpl singleton; private static TruffleObject singletonTruffleObject; @@ -124,14 +125,6 @@ public class TruffleLLVM_UpCallsRFFIImpl extends UpCallsRFFIImpl { } } - public Object R_NilValue() { - return RNull.instance; - } - - public Object R_UnboundValue() { - return RUnboundValue.instance; - } - public Object bytesToNativeCharArray(byte[] bytes) { return new NativeCharArray(bytes); } @@ -147,4 +140,180 @@ public class TruffleLLVM_UpCallsRFFIImpl extends UpCallsRFFIImpl { throw RInternalError.shouldNotReachHere(); } } + + @Override + public Object R_NilValue() { + return RNull.instance; + } + + @Override + public Object R_UnboundValue() { + return RUnboundValue.instance; + } + + @Override + public Object R_Srcref() { + return RFFIVariables.R_Srcref.getValue(); + } + + @Override + public Object R_MissingArg() { + return RFFIVariables.R_MissingArg.getValue(); + } + + @Override + public Object R_BaseSymbol() { + return RFFIVariables.R_BaseSymbol.getValue(); + } + + @Override + public Object R_BraceSymbol() { + return RFFIVariables.R_BraceSymbol.getValue(); + } + + @Override + public Object R_Bracket2Symbol() { + return RFFIVariables.R_Bracket2Symbol.getValue(); + } + + @Override + public Object R_BracketSymbol() { + return RFFIVariables.R_BracketSymbol.getValue(); + } + + @Override + public Object R_ClassSymbol() { + return RFFIVariables.R_ClassSymbol.getValue(); + } + + @Override + public Object R_DeviceSymbol() { + return RFFIVariables.R_DeviceSymbol.getValue(); + } + + @Override + public Object R_DimNamesSymbol() { + return RFFIVariables.R_DimNamesSymbol.getValue(); + } + + @Override + public Object R_DimSymbol() { + return RFFIVariables.R_DimSymbol.getValue(); + } + + @Override + public Object R_DollarSymbol() { + return RFFIVariables.R_DollarSymbol.getValue(); + } + + @Override + public Object R_DotsSymbol() { + return RFFIVariables.R_DotsSymbol.getValue(); + } + + @Override + public Object R_DropSymbol() { + return RFFIVariables.R_DropSymbol.getValue(); + } + + @Override + public Object R_LastvalueSymbol() { + return RFFIVariables.R_LastvalueSymbol.getValue(); + } + + @Override + public Object R_LevelsSymbol() { + return RFFIVariables.R_LevelsSymbol.getValue(); + } + + @Override + public Object R_ModeSymbol() { + return RFFIVariables.R_ModeSymbol.getValue(); + } + + @Override + public Object R_NaRmSymbol() { + return RFFIVariables.R_NaRmSymbol.getValue(); + } + + @Override + public Object R_NameSymbol() { + return RFFIVariables.R_NameSymbol.getValue(); + } + + @Override + public Object R_NamesSymbol() { + return RFFIVariables.R_NamesSymbol.getValue(); + } + + @Override + public Object R_NamespaceEnvSymbol() { + return RFFIVariables.R_NamespaceEnvSymbol.getValue(); + } + + @Override + public Object R_PackageSymbol() { + return RFFIVariables.R_PackageSymbol.getValue(); + } + + @Override + public Object R_QuoteSymbol() { + return RFFIVariables.R_QuoteSymbol.getValue(); + } + + @Override + public Object R_RowNamesSymbol() { + return RFFIVariables.R_RowNamesSymbol.getValue(); + } + + @Override + public Object R_SeedsSymbol() { + return RFFIVariables.R_SeedsSymbol.getValue(); + } + + @Override + public Object R_SourceSymbol() { + return RFFIVariables.R_SourceSymbol.getValue(); + } + + @Override + public Object R_TspSymbol() { + return RFFIVariables.R_TspSymbol.getValue(); + } + + @Override + public Object R_dot_defined() { + return RFFIVariables.R_dot_defined.getValue(); + } + + @Override + public Object R_dot_Method() { + return RFFIVariables.R_dot_Method.getValue(); + } + + @Override + public Object R_dot_target() { + return RFFIVariables.R_dot_target.getValue(); + } + + @Override + public Object R_NaString() { + return RFFIVariables.R_NaString.getValue(); + } + + @Override + public Object R_BlankString() { + return RFFIVariables.R_BlankString.getValue(); + } + + @Override + public Object R_BlankScalarString() { + return RFFIVariables.R_BlankScalarString.getValue(); + } + + @Override + public Object R_EmptyEnv() { + return RFFIVariables.R_EmptyEnv.getValue(); + } + } diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/VariableUpCallsRFFI.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/VariableUpCallsRFFI.java new file mode 100644 index 0000000000000000000000000000000000000000..b1749e8e99b73274a59308a74f546a8a9310f371 --- /dev/null +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/VariableUpCallsRFFI.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.truffle.r.engine.interop.ffi.llvm; + +import com.oracle.truffle.api.interop.TruffleObject; + +/** + * This exists because {@link TruffleObject} instances cannot currently be stored in memory, so + * upcall to get the values. + * + * TODO Some of these, e.g. {@link #R_NilValue}, are performance sensitive, but most are not. So we + * could collapse those into a single upcall that returned all the values in one go and extract the + * value with another upcall. + */ +public interface VariableUpCallsRFFI { + // Checkstyle: stop method name check + + Object R_EmptyEnv(); + + Object R_NilValue(); + + Object R_UnboundValue(); + + Object R_Srcref(); + + Object R_MissingArg(); + + Object R_BaseSymbol(); + + Object R_BraceSymbol(); + + Object R_Bracket2Symbol(); + + Object R_BracketSymbol(); + + Object R_ClassSymbol(); + + Object R_DeviceSymbol(); + + Object R_DimNamesSymbol(); + + Object R_DimSymbol(); + + Object R_DollarSymbol(); + + Object R_DotsSymbol(); + + Object R_DropSymbol(); + + Object R_LastvalueSymbol(); + + Object R_LevelsSymbol(); + + Object R_ModeSymbol(); + + Object R_NaRmSymbol(); + + Object R_NameSymbol(); + + Object R_NamesSymbol(); + + Object R_NamespaceEnvSymbol(); + + Object R_PackageSymbol(); + + Object R_QuoteSymbol(); + + Object R_RowNamesSymbol(); + + Object R_SeedsSymbol(); + + Object R_SourceSymbol(); + + Object R_TspSymbol(); + + Object R_dot_defined(); + + Object R_dot_Method(); + + Object R_dot_target(); + + Object R_NaString(); + + Object R_BlankString(); + + Object R_BlankScalarString(); + +} diff --git a/com.oracle.truffle.r.native/fficall/src/truffle_llvm/variables.c b/com.oracle.truffle.r.native/fficall/src/truffle_llvm/variables.c index 296aa073f59ca463fe1faf04783c74b201b440e3..f41cc549341b79624a2dcb02fff13a97918baef8 100644 --- a/com.oracle.truffle.r.native/fficall/src/truffle_llvm/variables.c +++ b/com.oracle.truffle.r.native/fficall/src/truffle_llvm/variables.c @@ -21,32 +21,39 @@ * questions. */ #include <rffiutils.h> -#include <variable_defs.h> +#include <variables.h> + +// Arith.h +double R_NaN; /* IEEE NaN */ +double R_PosInf; /* IEEE Inf */ +double R_NegInf; /* IEEE -Inf */ +double R_NaReal; /* NA_REAL: IEEE */ +int R_NaInt; /* NA_INTEGER:= INT_MIN currently */ // R_GlobalEnv et al are not a variables in FASTR as they are RContext specific -SEXP FASTR_GlobalEnv() { +SEXP FASTR_R_GlobalEnv() { IMPORT_CALLHELPER(); return truffle_invoke(obj, "R_GlobalEnv"); } -SEXP FASTR_BaseEnv() { +SEXP FASTR_R_BaseEnv() { IMPORT_CALLHELPER(); return truffle_invoke(obj, "R_BaseEnv"); } -SEXP FASTR_BaseNamespace() { +SEXP FASTR_R_BaseNamespace() { IMPORT_CALLHELPER(); return truffle_invoke(obj, "R_BaseNamespace"); } -SEXP FASTR_NamespaceRegistry() { +SEXP FASTR_R_NamespaceRegistry() { IMPORT_CALLHELPER(); return truffle_invoke(obj, "R_NamespaceRegistry"); } -Rboolean FASTR_IsInteractive() { +Rboolean FASTR_R_Interactive() { IMPORT_CALLHELPER(); - return (Rboolean) truffle_invoke_i(obj, "isInteractive"); + return (Rboolean) truffle_invoke_i(obj, "R_Interactive"); } char *FASTR_R_Home() { @@ -54,6 +61,8 @@ char *FASTR_R_Home() { return (char *) truffle_invoke(obj, "R_Home"); } +// Callbacks because cannot store TruffleObjects in memory (currently) + SEXP FASTR_R_NilValue() { IMPORT_CALLHELPER(); return truffle_invoke(obj, "R_NilValue"); @@ -65,53 +74,167 @@ SEXP FASTR_R_UnboundValue() { return truffle_invoke(obj, "R_UnboundValue"); } -void Call_initvar_obj(int index, void* value) { - /* - switch (index) { - case R_Home_x: R_Home = (char *) value; break; - case R_TempDir_x: R_TempDir = value; break; - case R_NilValue_x: R_NilValue = value; break; - case R_UnboundValue_x: R_UnboundValue = value; break; - case R_MissingArg_x: R_MissingArg = value; break; - case R_Srcref_x: R_Srcref = value; break; - case R_Bracket2Symbol_x: R_Bracket2Symbol = value; break; - case R_BracketSymbol_x: R_BracketSymbol = value; break; - case R_BraceSymbol_x: R_BraceSymbol = value; break; - case R_ClassSymbol_x: R_ClassSymbol = value; break; - case R_DeviceSymbol_x: R_DeviceSymbol = value; break; - case R_DevicesSymbol_x: R_DevicesSymbol = value; break; - case R_DimNamesSymbol_x: R_DimNamesSymbol = value; break; - case R_DimSymbol_x: R_DimSymbol = value; break; - case R_DollarSymbol_x: R_DollarSymbol = value; break; - case R_DotsSymbol_x: R_DotsSymbol = value; break; - case R_DropSymbol_x: R_DropSymbol = value; break; - case R_LastvalueSymbol_x: R_LastvalueSymbol = value; break; - case R_LevelsSymbol_x: R_LevelsSymbol = value; break; - case R_ModeSymbol_x: R_ModeSymbol = value; break; - case R_NameSymbol_x: R_NameSymbol = value; break; - case R_NamesSymbol_x: R_NamesSymbol = value; break; - case R_NaRmSymbol_x: R_NaRmSymbol = value; break; - case R_PackageSymbol_x: R_PackageSymbol = value; break; - case R_QuoteSymbol_x: R_QuoteSymbol = value; break; - case R_RowNamesSymbol_x: R_RowNamesSymbol = value; break; - case R_SeedsSymbol_x: R_SeedsSymbol = value; break; - case R_SourceSymbol_x: R_SourceSymbol = value; break; - case R_TspSymbol_x: R_TspSymbol = value; break; - case R_dot_defined_x: R_dot_defined = value; break; - case R_dot_Method_x: R_dot_Method = value; break; - case R_dot_target_x: R_dot_target = value; break; - case R_SrcrefSymbol_x: R_SrcrefSymbol = value; break; - case R_SrcfileSymbol_x: R_SrcfileSymbol = value; break; - case R_NaString_x: R_NaString = value; break; - case R_NaInt_x: R_NaInt = (int) value; break; - case R_BlankString_x: R_BlankString = value; break; - case R_TrueValue_x: R_TrueValue = value; break; - case R_FalseValue_x: R_FalseValue = value; break; - case R_LogicalNAValue_x: R_LogicalNAValue = value; break; - } - */ +SEXP FASTR_R_EmptyEnv() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_EmptyEnv"); +} + +SEXP FASTR_R_MissingArg() { + IMPORT_CALLHELPER(); + return Truffle_Invoke(Obj, "R_MissingArg"); +} + +SEXP FASTR_R_BaseSymbol() { + IMPORT_CALLHELPER(); + Return Truffle_Invoke(Obj, "R_BaseSymbol"); +} + +SEXP FASTR_R_BraceSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_BraceSymbol"); +} + +SEXP FASTR_R_Bracket2Symbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_Bracket2Symbol"); +} + +SEXP FASTR_R_BracketSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_BracketSymbol"); +} + +SEXP FASTR_R_ClassSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_ClassSymbol"); +} + +SEXP FASTR_R_DeviceSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_DeviceSymbol"); +} + +SEXP FASTR_R_DimNamesSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_DimNamesSymbol"); +} + +SEXP FASTR_R_DimSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_DimSymbol"); +} + +SEXP FASTR_R_DollarSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_DollarSymbol"); +} + +SEXP FASTR_R_DotsSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_DotsSymbol"); +} + +SEXP FASTR_R_DropSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_DropSymbol"); +} + +SEXP FASTR_R_LastvalueSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_LastvalueSymbol"); +} + +SEXP FASTR_R_LevelsSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_LevelsSymbol"); +} + +SEXP FASTR_R_ModeSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_ModeSymbol"); +} + +SEXP FASTR_R_NaRmSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_NaRmSymbol"); +} + +SEXP FASTR_R_NameSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_NameSymbol"); +} + +SEXP FASTR_R_NamesSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_NamesSymbol"); +} + +SEXP FASTR_R_NamespaceEnvSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_NamespaceEnvSymbol"); +} + +SEXP FASTR_R_PackageSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_PackageSymbol"); +} + +SEXP FASTR_R_QuoteSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_QuoteSymbol"); +} + +SEXP FASTR_R_RowNamesSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_RowNamesSymbol"); +} + +SEXP FASTR_R_SeedsSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_SeedsSymbol"); } +SEXP FASTR_R_SourceSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_SourceSymbol"); +} + +SEXP FASTR_R_TspSymbol() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_TspSymbol"); +} + +SEXP FASTR_R_dot_defined() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_dot_defined"); +} + +SEXP FASTR_R_dot_Method() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_dot_Method"); +} + +SEXP FASTR_R_dot_target() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_dot_target"); +} + +SEXP FASTR_R_NaString() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_NaString"); +} + +SEXP FASTR_R_BlankString() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_BlankString"); +} + +SEXP FASTR_R_BlankScalarString() { + IMPORT_CALLHELPER(); + return truffle_invoke(obj, "R_BlankScalarString"); +} + + void Call_initvar_double(int index, double value) { switch (index) { case R_NaN_x: R_NaN = value; break; diff --git a/com.oracle.truffle.r.native/fficall/src/truffle_llvm/variables.h b/com.oracle.truffle.r.native/fficall/src/truffle_llvm/variables.h new file mode 100644 index 0000000000000000000000000000000000000000..3a245b1fa929a70ebea8719ae90c36704da0bc17 --- /dev/null +++ b/com.oracle.truffle.r.native/fficall/src/truffle_llvm/variables.h @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +#define R_Home_x 0 +#define R_TempDir_x 1 +#define R_NilValue_x 2 +#define R_UnboundValue_x 3 +#define R_MissingArg_x 4 +#define R_GlobalEnv_x 5 +#define R_EmptyEnv_x 6 +#define R_BaseEnv_x 7 +#define R_BaseNamespace_x 8 +#define R_NamespaceRegistry_x 9 +#define R_Srcref_x 10 +#define R_Bracket2Symbol_x 11 +#define R_BracketSymbol_x 12 +#define R_BraceSymbol_x 13 +#define R_ClassSymbol_x 14 +#define R_DeviceSymbol_x 15 +#define R_DevicesSymbol_x 16 +#define R_DimNamesSymbol_x 17 +#define R_DimSymbol_x 18 +#define R_DollarSymbol_x 19 +#define R_DotsSymbol_x 20 +#define R_DropSymbol_x 21 +#define R_LastvalueSymbol_x 22 +#define R_LevelsSymbol_x 23 +#define R_ModeSymbol_x 24 +#define R_NameSymbol_x 25 +#define R_NamesSymbol_x 26 +#define R_NaRmSymbol_x 27 +#define R_PackageSymbol_x 28 +#define R_QuoteSymbol_x 29 +#define R_RowNamesSymbol_x 30 +#define R_SeedsSymbol_x 31 +#define R_SourceSymbol_x 32 +#define R_TspSymbol_x 33 +#define R_dot_defined_x 34 +#define R_dot_Method_x 35 +#define R_dot_target_x 36 +#define R_SrcrefSymbol_x 37 +#define R_SrcfileSymbol_x 38 +#define R_NaString_x 39 +#define R_NaN_x 40 +#define R_PosInf_x 41 +#define R_NegInf_x 42 +#define R_NaReal_x 43 +#define R_NaInt_x 44 +#define R_BlankString_x 45 +#define R_BlankScalarString_x 46 +#define R_TrueValue_x 47 +#define R_FalseValue_x 48 +#define R_LogicalNAValue_x 49 +#define R_BaseSymbol_x 50 +#define R_NamespaceEnvSymbol_x 51 +#define R_RestartToken_x 52