/*
* R : A Computer Language for Statistical Data Analysis
* Copyright (C) 1995, 1996 Robert Gentleman and Ross Ihaka
* Copyright (C) 1998--2006 The R Development Core Team.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program 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 for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef DEFN_H_
#define DEFN_H_
/* seems unused */
#define COUNTING
#define BYTECODE
/* probably no longer needed */
#define NEW_CONDITION_HANDLING
/* To test the write barrier used by the generational collector,
define TESTING_WRITE_BARRIER. This makes the internal structure of
SEXPRECs visible only inside of files that explicitly define
USE_RINTERNALS, and all uses of SEXPREC fields that do not go
through the appropriate functions or macros will become compilation
errors. Since this does impose a small but noticable performance
penalty, code that includes Defn.h (or code that explicitly defines
USE_RINTERNALS) can access a SEXPREC's fields directly. */
#ifndef TESTING_WRITE_BARRIER
# define USE_RINTERNALS
#endif
#ifdef HAVE_VISIBILITY_ATTRIBUTE
# define attribute_visible __attribute__ ((visibility ("default")))
# define attribute_hidden __attribute__ ((visibility ("hidden")))
#else
# define attribute_visible
# define attribute_hidden
#endif
#define MAXELTSIZE 8192 /* The largest string size */
#include <R_ext/Complex.h>
void Rf_CoercionWarning(int);/* warning code */
int Rf_LogicalFromInteger(int, int*);
int Rf_LogicalFromReal(double, int*);
int Rf_LogicalFromComplex(Rcomplex, int*);
int Rf_IntegerFromLogical(int, int*);
int Rf_IntegerFromReal(double, int*);
int Rf_IntegerFromComplex(Rcomplex, int*);
double Rf_RealFromLogical(int, int*);
double Rf_RealFromInteger(int, int*);
double Rf_RealFromComplex(Rcomplex, int*);
Rcomplex Rf_ComplexFromLogical(int, int*);
Rcomplex Rf_ComplexFromInteger(int, int*);
Rcomplex Rf_ComplexFromReal(double, int*);
#define CALLED_FROM_DEFN_H 1
#include <Rinternals.h> /*-> Arith.h, Complex.h, Error.h, Memory.h
PrtUtil.h, Utils.h */
#undef CALLED_FROM_DEFN_H
#include "Internal.h" /* do_FOO */
#include "Errormsg.h"
/* SunOS 4 is famous for broken header files. */
#ifdef SunOS4
# ifndef NULL
# define NULL 0
# endif
#endif /* SunOS4 */
#if defined(Win32) || defined(HAVE_AQUA)
extern void R_ProcessEvents(void);
#endif
#ifdef Win32
# include <psignal.h>
#else
# include <signal.h>
# include <setjmp.h>
#endif
#ifdef Unix
# define OSTYPE "unix"
# define FILESEP "/"
#endif /* Unix */
#ifdef Win32
# define OSTYPE "windows"
# define FILESEP "/"
#endif /* Win32 */
#ifdef HAVE_F77_UNDERSCORE
# define F77_SYMBOL(x) x ## _
# define F77_QSYMBOL(x) #x "_"
#else
# define F77_SYMBOL(x) x
# define F77_QSYMBOL(x) #x
#endif
/* Heap and Pointer Protection Stack Sizes. */
/* These are for future protection: will need to be different on Win64 */
typedef unsigned long R_ulong_t;
typedef long R_long_t;
/* NB: will need a 64-bit type, ULONG64 or size_t, for Win64 */
#if defined HAVE_DECL_SIZE_MAX && HAVE_DECL_SIZE_MAX
# ifdef HAVE_INTTYPES_H
# include <inttypes.h>
# endif
/* According to POSIX inttypes.h should include stdint.h, but let's be
sure. */
# ifdef HAVE_STDINT_H
# include <stdint.h>
# endif
# ifdef HAVE_LIMITS_H
# include <limits.h>
# endif
typedef size_t R_size_t;
/* final precaution in case we don't have the right headers */
# ifdef SIZE_MAX
# define R_SIZE_T_MAX SIZE_MAX
# else
# define R_SIZE_T_MAX ULONG_MAX
# endif
#else
typedef unsigned long R_size_t;
# define R_SIZE_T_MAX ULONG_MAX
#endif
/* These are optional C99 types */
#if !defined(HAVE_INTPTR_T) && !defined(intptr_t)
typedef long intptr_t;
#endif
#if !defined(HAVE_UINTPTR_T) && !defined(uintptr_t)
typedef unsigned long uintptr_t;
#endif
#define Mega 1048576. /* 1 Mega Byte := 2^20 (= 1048576) Bytes */
#define Giga 1073741824. /* 1 Giga Byte := 2^30 Bytes */
/* R_PPSSIZE The pointer protection stack size */
/* R_NSIZE The number of cons cells */
/* R_VSIZE The vector heap size in bytes */
/* These values are defaults and can be overridden in config.h
The maxima and minima are in ../unix/sys-common.c */
#ifndef R_PPSSIZE
#define R_PPSSIZE 50000L
#endif
#ifndef R_NSIZE
#define R_NSIZE 350000L
#endif
#ifndef R_VSIZE
#define R_VSIZE 6291456L
#endif
#include <math.h>
/* declare substitutions */
#if !defined(acosh) && defined(HAVE_DECL_ACOSH) && !HAVE_DECL_ACOSH
extern double acosh(double x);
#endif
#if !defined(asinh) && defined(HAVE_DECL_ASINH) && !HAVE_DECL_ASINH
extern double asinh(double x);
#endif
#if !defined(atanh) && defined(HAVE_DECL_ATANH) && !HAVE_DECL_ATANH
extern double atanh(double x);
#endif
#if !defined(snprintf) && defined(HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF
extern int snprintf (char *s, size_t n, const char *format, ...);
#endif
#if !defined(strdup) && defined(HAVE_DECL_STRDUP) && !HAVE_DECL_STRDUP
extern char *strdup(const char *s1);
#endif
#if !defined(strncascmp) && defined(HAVE_DECL_STRNCASECMP) && !HAVE_DECL_STRNCASECMP
extern int strncasecmp(const char *s1, const char *s2, size_t n);
#endif
#if !defined(vsnprintf) && defined(HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF
extern int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);
#endif
/* Glibc manages to not define this in -pedantic -ansi */
#if defined(HAVE_PUTENV) && !defined(putenv) && defined(HAVE_DECL_PUTENV) && !HAVE_DECL_PUTENV
extern int putenv(char *string);
#endif
/* Maximal length of an entire file name */
#if !defined(PATH_MAX)
# if defined(HAVE_SYS_PARAM_H)
# include <sys/param.h>
# endif
# if !defined(PATH_MAX)
# if defined(MAXPATHLEN)
# define PATH_MAX MAXPATHLEN
# elif defined(Win32)
# define PATH_MAX 260
# else
/* quite possibly unlimited, so we make this large, and test when used */
# define PATH_MAX 5000
# endif
# endif
#endif
#ifdef HAVE_POSIX_SETJMP
# define SIGJMP_BUF sigjmp_buf
# define SIGSETJMP(x,s) sigsetjmp(x,s)
# define SIGLONGJMP(x,i) siglongjmp(x,i)
# define JMP_BUF sigjmp_buf
# define SETJMP(x) sigsetjmp(x,0)
# define LONGJMP(x,i) siglongjmp(x,i)
#else
# define SIGJMP_BUF jmp_buf
# define SIGSETJMP(x,s) setjmp(x)
# define SIGLONGJMP(x,i) longjmp(x,i)
# define JMP_BUF jmp_buf
# define SETJMP(x) setjmp(x)
# define LONGJMP(x,i) longjmp(x,i)
#endif
/* Availability of timing: on Unix, we need times(2).
On Windows and the Mac, we can do without.
*/
#if (defined(HAVE_TIMES) || defined(Win32))
# define _R_HAVE_TIMING_ 1
#endif
#include <R_ext/Rdynload.h>
#define HSIZE 4119 /* The size of the hash table for symbols */
#define MAXIDSIZE 256 /* Largest symbol size possible */
/* The type of the do_xxxx functions. */
/* These are the built-in R functions. */
typedef SEXP (*CCODE)();
/* Information for Deparsing Expressions */
typedef enum {
PP_ASSIGN = 1,
PP_ASSIGN2 = 2,
PP_BINARY = 3,
PP_BINARY2 = 4,
PP_BREAK = 5,
PP_CURLY = 6,
PP_FOR = 7,
PP_FUNCALL = 8,
PP_FUNCTION = 9,
PP_IF = 10,
PP_NEXT = 11,
PP_PAREN = 12,
PP_RETURN = 13,
PP_SUBASS = 14,
PP_SUBSET = 15,
PP_WHILE = 16,
PP_UNARY = 17,
PP_DOLLAR = 18,
PP_FOREIGN = 19,
PP_REPEAT = 20
} PPkind;
typedef enum {
PREC_FN = 0,
PREC_LEFT = 1,
PREC_EQ = 2,
PREC_RIGHT = 3,
PREC_TILDE = 4,
PREC_OR = 5,
PREC_AND = 6,
PREC_NOT = 7,
PREC_COMPARE = 8,
PREC_SUM = 9,
PREC_PROD = 10,
PREC_PERCENT = 11,
PREC_COLON = 12,
PREC_SIGN = 13,
PREC_POWER = 14,
PREC_DOLLAR = 15,
PREC_NS = 16,
PREC_SUBSET = 17
} PPprec;
typedef struct {
PPkind kind; /* deparse kind */
PPprec precedence; /* operator precedence */
unsigned int rightassoc; /* right associative? */
} PPinfo;
/* The type definitions for the table of built-in functions. */
/* This table can be found in ../main/names.c */
typedef struct {
char *name; /* print name */
CCODE cfun; /* c-code address */
int code; /* offset within c-code */
int eval; /* evaluate args? */
int arity; /* function arity */
PPinfo gram; /* pretty-print info */
} FUNTAB;
#ifdef USE_RINTERNALS
/* There is much more in Rinternals.h, including function versions
* of the Promise and Hasking groups.
*/
/* Primitive Access Macros */
#define PRIMOFFSET(x) ((x)->u.primsxp.offset)
#define SET_PRIMOFFSET(x,v) (((x)->u.primsxp.offset)=(v))
#define PRIMFUN(x) (R_FunTab[(x)->u.primsxp.offset].cfun)
#define PRIMNAME(x) (R_FunTab[(x)->u.primsxp.offset].name)
#define PRIMVAL(x) (R_FunTab[(x)->u.primsxp.offset].code)
#define PRIMARITY(x) (R_FunTab[(x)->u.primsxp.offset].arity)
#define PPINFO(x) (R_FunTab[(x)->u.primsxp.offset].gram)
#define PRIMPRINT(x) (((R_FunTab[(x)->u.primsxp.offset].eval)/100)%10)
/* Promise Access Macros */
#define PRCODE(x) ((x)->u.promsxp.expr)
#define PRENV(x) ((x)->u.promsxp.env)
#define PRVALUE(x) ((x)->u.promsxp.value)
#define PRSEEN(x) ((x)->sxpinfo.gp)
#define SET_PRSEEN(x,v) (((x)->sxpinfo.gp)=(v))
/* Hashing Macros */
#define HASHASH(x) ((x)->sxpinfo.gp)
#define HASHVALUE(x) TRUELENGTH(x)
#define SET_HASHASH(x,v) (((x)->sxpinfo.gp)=(v))
#define SET_HASHVALUE(x,v) SET_TRUELENGTH(x, v)
/* Vector Heap Structure */
typedef struct {
union {
SEXP backpointer;
double align;
} u;
} VECREC, *VECP;
/* Vector Heap Macros */
#define BACKPOINTER(v) ((v).u.backpointer)
#define BYTE2VEC(n) (((n)>0)?(((n)-1)/sizeof(VECREC)+1):0)
#define INT2VEC(n) (((n)>0)?(((n)*sizeof(int)-1)/sizeof(VECREC)+1):0)
#define FLOAT2VEC(n) (((n)>0)?(((n)*sizeof(double)-1)/sizeof(VECREC)+1):0)
#define COMPLEX2VEC(n) (((n)>0)?(((n)*sizeof(Rcomplex)-1)/sizeof(VECREC)+1):0)
#define PTR2VEC(n) (((n)>0)?(((n)*sizeof(SEXP)-1)/sizeof(VECREC)+1):0)
/* Bindings */
/* use the same bits (15 and 14) in symbols and bindings */
#define ACTIVE_BINDING_MASK (1<<15)
#define BINDING_LOCK_MASK (1<<14)
#define SPECIAL_BINDING_MASK (ACTIVE_BINDING_MASK | BINDING_LOCK_MASK)
#define IS_ACTIVE_BINDING(b) ((b)->sxpinfo.gp & ACTIVE_BINDING_MASK)
#define BINDING_IS_LOCKED(b) ((b)->sxpinfo.gp & BINDING_LOCK_MASK)
#define SET_ACTIVE_BINDING_BIT(b) ((b)->sxpinfo.gp |= ACTIVE_BINDING_MASK)
#define LOCK_BINDING(b) ((b)->sxpinfo.gp |= BINDING_LOCK_MASK)
#define UNLOCK_BINDING(b) ((b)->sxpinfo.gp &= (~BINDING_LOCK_MASK))
#else /* USE_RINTERNALS */
typedef struct VECREC *VECP;
int (PRIMOFFSET)(SEXP x);
void (SET_PRIMOFFSET)(SEXP x, int v);
#define PRIMFUN(x) (R_FunTab[PRIMOFFSET(x)].cfun)
#define PRIMNAME(x) (R_FunTab[PRIMOFFSET(x)].name)
#define PRIMVAL(x) (R_FunTab[PRIMOFFSET(x)].code)
#define PRIMARITY(x) (R_FunTab[PRIMOFFSET(x)].arity)
#define PPINFO(x) (R_FunTab[PRIMOFFSET(x)].gram)
#define PRIMPRINT(x) (((R_FunTab[PRIMOFFSET(x)].eval)/100)%10)
Rboolean (IS_ACTIVE_BINDING)(SEXP b);
Rboolean (BINDING_IS_LOCKED)(SEXP b);
void (SET_ACTIVE_BINDING_BIT)(SEXP b);
void (LOCK_BINDING)(SEXP b);
void (UNLOCK_BINDING)(SEXP b);
#endif /* USE_RINTERNALS */
#ifdef BYTECODE
# ifdef BC_INT_STACK
typedef union { void *p; int i; } IStackval;
# endif
#endif
/* Evaluation Context Structure */
typedef struct RCNTXT {
struct RCNTXT *nextcontext; /* The next context up the chain */
int callflag; /* The context "type" */
JMP_BUF cjmpbuf; /* C stack and register information */
int cstacktop; /* Top of the pointer protection stack */
int evaldepth; /* evaluation depth at inception */
SEXP promargs; /* Promises supplied to closure */
SEXP callfun; /* The closure called */
SEXP sysparent; /* environment the closure was called from */
SEXP call; /* The call that effected this context*/
SEXP cloenv; /* The environment */
SEXP conexit; /* Interpreted "on.exit" code */
void (*cend)(void *); /* C "on.exit" thunk */
void *cenddata; /* data for C "on.exit" thunk */
char *vmax; /* top of R_alloc stack */
int intsusp; /* interrupts are suspended */
SEXP handlerstack; /* condition handler stack */
SEXP restartstack; /* stack of available restarts */
#ifdef BYTECODE
SEXP *nodestack;
# ifdef BC_INT_STACK
IStackval *intstack;
# endif
#endif
} RCNTXT, *context;
/* The Various Context Types.
* In general the type is a bitwise OR of the values below.
* Note that CTXT_LOOP is already the or of CTXT_NEXT and CTXT_BREAK.
* Only functions should have the third bit turned on;
* this allows us to move up the context stack easily
* with either RETURN's or GENERIC's or RESTART's.
* If you add a new context type for functions make sure
* CTXT_NEWTYPE & CTXT_FUNCTION > 0
*/
enum {
CTXT_TOPLEVEL = 0,
CTXT_NEXT = 1,
CTXT_BREAK = 2,
CTXT_LOOP = 3, /* break OR next target */
CTXT_FUNCTION = 4,
CTXT_CCODE = 8,
CTXT_RETURN = 12,
CTXT_BROWSER = 16,
CTXT_GENERIC = 20,
CTXT_RESTART = 32,
CTXT_BUILTIN = 64 /* used in profiling */
};
/*
TOP 0 0 0 0 0 0 = 0
NEX 1 0 0 0 0 0 = 1
BRE 0 1 0 0 0 0 = 2
LOO 1 1 0 0 0 0 = 3
FUN 0 0 1 0 0 0 = 4
CCO 0 0 0 1 0 0 = 8
BRO 0 0 0 0 1 0 = 16
RET 0 0 1 1 0 0 = 12
GEN 0 0 1 0 1 0 = 20
RES 0 0 0 0 0 0 1 = 32
BUI 0 0 0 0 0 0 0 1 = 64
*/
#define IS_RESTART_BIT_SET(flags) ((flags) & CTXT_RESTART)
#define SET_RESTART_BIT_ON(flags) (flags |= CTXT_RESTART)
#define SET_RESTART_BIT_OFF(flags) (flags &= ~CTXT_RESTART)
/* Miscellaneous Definitions */
#define streql(s, t) (!strcmp((s), (t)))
/* Arithmetic and Relation Operators */
typedef enum {
PLUSOP = 1,
MINUSOP,
TIMESOP,
DIVOP,
POWOP,
MODOP,
IDIVOP
} ARITHOP_TYPE;
typedef enum {
EQOP = 1,
NEOP,
LTOP,
LEOP,
GEOP,
GTOP
} RELOP_TYPE;
/* File Handling */
/*
#define R_EOF 65535
*/
#define R_EOF -1
/*--- Global Variables ---------------------------------------------------- */
/* Defined and initialized in names.c (not main.c) :*/
#ifndef __R_Names__
extern
#endif
FUNTAB R_FunTab[]; /* Built in functions */
#include <R_ext/libextern.h>
#ifdef __MAIN__
# define INI_as(v) = v
#define extern0 attribute_hidden
#else
# define INI_as(v)
#define extern0 extern
#endif
/* extern int errno; already have errno.h ! */
extern int gc_inhibit_torture INI_as(1);
LibExtern Rboolean R_interrupts_suspended INI_as(FALSE);
LibExtern int R_interrupts_pending INI_as(0);
/* R Home Directory */
LibExtern char* R_Home; /* Root of the R tree */
/* Memory Management */
extern0 R_size_t R_NSize INI_as(R_NSIZE);/* Size of cons cell heap */
extern0 R_size_t R_VSize INI_as(R_VSIZE);/* Size of the vector heap */
extern0 SEXP R_NHeap; /* Start of the cons cell heap */
extern0 SEXP R_FreeSEXP; /* Cons cell free list */
extern0 R_size_t R_Collected; /* Number of free cons cells (after gc) */
extern0 SEXP R_PreciousList; /* List of Persistent Objects */
LibExtern int R_Is_Running; /* for Windows memory manager */
/* The Pointer Protection Stack */
extern0 int R_PPStackSize INI_as(R_PPSSIZE); /* The stack size (elements) */
extern0 int R_PPStackTop; /* The top of the stack */
extern0 SEXP* R_PPStack; /* The pointer protection stack */
/* Evaluation Environment */
LibExtern SEXP R_CurrentExpr; /* Currently evaluating expression */
extern0 SEXP R_ReturnedValue; /* Slot for return-ing values */
extern0 SEXP* R_SymbolTable; /* The symbol table */
LibExtern RCNTXT R_Toplevel; /* Storage for the toplevel environment */
LibExtern RCNTXT* R_ToplevelContext; /* The toplevel environment */
LibExtern RCNTXT* R_GlobalContext; /* The global environment */
LibExtern int R_Visible; /* Value visibility flag */
LibExtern int R_EvalDepth INI_as(0); /* Evaluation recursion depth */
extern0 int R_BrowseLevel INI_as(0); /* how deep the browser is */
extern0 int R_BrowseLines INI_as(0); /* lines/per call in browser */
extern0 int R_Expressions INI_as(5000); /* options(expressions) */
extern0 int R_Expressions_keep INI_as(5000); /* options(expressions) */
extern0 Rboolean R_KeepSource INI_as(FALSE); /* options(keep.source) */
extern0 int R_WarnLength INI_as(1000); /* Error/warning max length */
extern uintptr_t R_CStackLimit INI_as((uintptr_t)-1); /* C stack limit */
extern uintptr_t R_CStackStart INI_as((uintptr_t)-1); /* Initial stack address */
extern0 int R_CStackDir INI_as(1); /* C stack direction */
/* File Input/Output */
LibExtern Rboolean R_Interactive INI_as(TRUE); /* TRUE during interactive use*/
extern0 Rboolean R_Quiet INI_as(FALSE); /* Be as quiet as possible */
extern Rboolean R_Slave INI_as(FALSE); /* Run as a slave process */
extern0 Rboolean R_Verbose INI_as(FALSE); /* Be verbose */
/* extern int R_Console; */ /* Console active flag */
/* IoBuffer R_ConsoleIob; : --> ./IOStuff.h */
/* R_Consolefile is used in the internet module */
extern FILE* R_Consolefile INI_as(NULL); /* Console output file */
extern FILE* R_Outputfile INI_as(NULL); /* Output file */
extern0 int R_ErrorCon INI_as(2); /* Error connection */
LibExtern char* R_TempDir INI_as(NULL); /* Name of per-session dir */
extern0 char* Sys_TempDir INI_as(NULL); /* Name of per-session dir
if set by R itself */
extern0 char R_StdinEnc[31] INI_as(""); /* Encoding assumed for stdin */
/* Objects Used In Parsing */
extern0 SEXP R_CommentSxp; /* Comments accumulate here */
extern0 int R_ParseError INI_as(0); /* Line where parse error occured */
#define PARSE_CONTEXT_SIZE 256 /* Recent parse context kept in a circular buffer */
extern0 char R_ParseContext[PARSE_CONTEXT_SIZE] INI_as("");
extern0 int R_ParseContextLast INI_as(0); /* last character in context buffer */
/* Image Dump/Restore */
extern int R_DirtyImage INI_as(0); /* Current image dirty */
/* History */
LibExtern char* R_HistoryFile; /* Name of the history file */
LibExtern int R_HistorySize; /* Size of the history file */
LibExtern int R_RestoreHistory; /* restore the history file? */
extern void R_setupHistory();
/* Warnings/Errors */
extern0 int R_CollectWarnings INI_as(0); /* the number of warnings */
extern0 SEXP R_Warnings; /* the warnings and their calls */
extern0 int R_ShowErrorMessages INI_as(1); /* show error messages? */
extern0 SEXP R_HandlerStack; /* Condition handler stack */
extern0 SEXP R_RestartStack; /* Stack of available restarts */
LibExtern Rboolean utf8locale INI_as(FALSE); /* is this a UTF-8 locale? */
LibExtern Rboolean mbcslocale INI_as(FALSE); /* is this a MBCS locale? */
#ifdef Win32
LibExtern unsigned int localeCP INI_as(1252); /* the locale's codepage */
#endif
extern0 char OutDec INI_as('.'); /* decimal point used for output */
/* Initialization of the R environment when it is embedded */
extern int Rf_initEmbeddedR(int argc, char **argv);
/* GUI type */
extern char* R_GUIType INI_as("unknown");
#ifdef BYTECODE
#define R_BCNODESTACKSIZE 10000
extern0 SEXP *R_BCNodeStackBase, *R_BCNodeStackTop, *R_BCNodeStackEnd;
# ifdef BC_INT_STACK
#define R_BCINTSTACKSIZE 10000
extern0 IStackval *R_BCIntStackBase, *R_BCIntStackTop, *R_BCIntStackEnd;
# endif
#endif
/* Pointer type and utilities for dispatch in the methods package */
typedef SEXP (*R_stdGen_ptr_t)(SEXP, SEXP, SEXP); /* typedef */
R_stdGen_ptr_t R_get_standardGeneric_ptr(); /* get method */
R_stdGen_ptr_t R_set_standardGeneric_ptr(R_stdGen_ptr_t, SEXP); /* set method */
LibExtern SEXP R_MethodsNamespace;
SEXP R_deferred_default_method();
SEXP R_set_prim_method(SEXP fname, SEXP op, SEXP code_vec, SEXP fundef,
SEXP mlist);
SEXP do_set_prim_method(SEXP op, char *code_string, SEXP fundef, SEXP mlist);
void R_set_quick_method_check(R_stdGen_ptr_t);
SEXP R_primitive_methods(SEXP op);
SEXP R_primitive_generic(SEXP op);
/* slot management (in attrib.c) */
SEXP R_do_slot(SEXP obj, SEXP name);
SEXP R_do_slot_assign(SEXP obj, SEXP name, SEXP value);
/* smallest decimal exponent, needed in format.c, set in Init_R_Machine */
extern0 int R_dec_min_exponent INI_as(-308);
/* structure for caching machine accuracy values */
typedef struct {
int ibeta, it, irnd, ngrd, machep, negep, iexp, minexp, maxexp;
double eps, epsneg, xmin, xmax;
} AccuracyInfo;
LibExtern AccuracyInfo R_AccuracyInfo;
extern0 unsigned int max_contour_segments INI_as(25000);
#ifdef __MAIN__
# undef extern
# undef extern0
# undef LibExtern
#endif
#undef INI_as
/*--- FUNCTIONS ------------------------------------------------------ */
# define begincontext Rf_begincontext
# define checkArity Rf_checkArity
# define check_stack_balance Rf_check_stack_balance
# define CheckFormals Rf_CheckFormals
# define CleanEd Rf_CleanEd
# define CoercionWarning Rf_CoercionWarning
# define ComplexFromInteger Rf_ComplexFromInteger
# define ComplexFromLogical Rf_ComplexFromLogical
# define ComplexFromReal Rf_ComplexFromReal
# define ComplexFromString Rf_ComplexFromString
# define copyListMatrix Rf_copyListMatrix
# define copyMostAttribNoTs Rf_copyMostAttribNoTs
# define CustomPrintValue Rf_CustomPrintValue
# define DataFrameClass Rf_DataFrameClass
# define ddfindVar Rf_ddfindVar
# define deparse1 Rf_deparse1
# define deparse1line Rf_deparse1line
# define DispatchGroup Rf_DispatchGroup
# define DispatchOrEval Rf_DispatchOrEval
# define dynamicfindVar Rf_dynamicfindVar
# define EncodeRaw Rf_EncodeRaw
# define EncodeString Rf_EncodeString
# define EnsureString Rf_EnsureString
# define endcontext Rf_endcontext
# define envlength Rf_envlength
# define ErrorMessage Rf_ErrorMessage
# define evalList Rf_evalList
# define evalListKeepMissing Rf_evalListKeepMissing
# define factorsConform Rf_factorsConform
# define findcontext Rf_findcontext
# define findVar1 Rf_findVar1
# define FrameClassFix Rf_FrameClassFix
# define framedepth Rf_framedepth
# define frameSubscript Rf_frameSubscript
# define get1index Rf_get1index
# define getVar Rf_getVar
# define getVarInFrame Rf_getVarInFrame
# define hashpjw Rf_hashpjw
# define InheritsClass Rf_InheritsClass
# define InitArithmetic Rf_InitArithmetic
# define InitColors Rf_InitColors
# define InitConnections Rf_InitConnections
# define InitEd Rf_InitEd
# define InitFunctionHashing Rf_InitFunctionHashing
# define InitBaseEnv Rf_InitBaseEnv
# define InitGlobalEnv Rf_InitGlobalEnv
# define InitMemory Rf_InitMemory
# define InitNames Rf_InitNames
# define InitOptions Rf_InitOptions
# define InitTempDir Rf_InitTempDir
# define initStack Rf_initStack
# define IntegerFromComplex Rf_IntegerFromComplex
# define IntegerFromLogical Rf_IntegerFromLogical
# define IntegerFromReal Rf_IntegerFromReal
# define IntegerFromString Rf_IntegerFromString
# define internalTypeCheck Rf_internalTypeCheck
# define isValidName Rf_isValidName
# define ItemName Rf_ItemName
# define jump_to_toplevel Rf_jump_to_toplevel
# define levelsgets Rf_levelsgets
# define LogicalFromComplex Rf_LogicalFromComplex
# define LogicalFromInteger Rf_LogicalFromInteger
# define LogicalFromReal Rf_LogicalFromReal
# define LogicalFromString Rf_LogicalFromString
# define mainloop Rf_mainloop
# define makeSubscript Rf_makeSubscript
# define mat2indsub Rf_mat2indsub
# define matchArg Rf_matchArg
# define matchArgExact Rf_matchArgExact
# define matchArgs Rf_matchArgs
# define matchPar Rf_matchPar
# define Mbrtowc Rf_mbrtowc
# define mkCLOSXP Rf_mkCLOSXP
# define mkComplex Rf_mkComplex
# define mkFalse Rf_mkFalse
# define mkFloat Rf_mkFloat
# define mkNA Rf_mkNA
# define mkPROMISE Rf_mkPROMISE
# define mkQUOTE Rf_mkQUOTE
# define mkSYMSXP Rf_mkSYMSXP
# define mkTrue Rf_mkTrue
# define NewEnvironment Rf_NewEnvironment
# define OneIndex Rf_OneIndex
# define onintr Rf_onintr
# define onsigusr1 Rf_onsigusr1
# define onsigusr2 Rf_onsigusr2
# define parse Rf_parse
# define PrintDefaults Rf_PrintDefaults
# define PrintGreeting Rf_PrintGreeting
# define PrintValueEnv Rf_PrintValueEnv
# define PrintValueRec Rf_PrintValueRec
# define PrintVersion Rf_PrintVersion
# define PrintVersionString Rf_PrintVersionString
# define PrintWarnings Rf_PrintWarnings
# define promiseArgs Rf_promiseArgs
# define RealFromComplex Rf_RealFromComplex
# define RealFromInteger Rf_RealFromInteger
# define RealFromLogical Rf_RealFromLogical
# define RealFromString Rf_RealFromString
# define RemoveClass Rf_RemoveClass
# define sortVector Rf_sortVector
# define ssort Rf_ssort
# define str2type Rf_str2type
# define StringFromComplex Rf_StringFromComplex
# define StringFromInteger Rf_StringFromInteger
# define StringFromLogical Rf_StringFromLogical
# define StringFromReal Rf_StringFromReal
# define StrToInternal Rf_StrToInternal
# define substituteList Rf_substituteList
# define tsConform Rf_tsConform
# define tspgets Rf_tspgets
# define type2char Rf_type2char
# define type2str Rf_type2str
# define type2symbol Rf_type2symbol
# define unbindVar Rf_unbindVar
# define usemethod Rf_usemethod
# define vectorSubscript Rf_vectorSubscript
# define warningcall Rf_warningcall
# define WarningMessage Rf_WarningMessage
# define yychar Rf_yychar
# define yylval Rf_yylval
# define yynerrs Rf_yynerrs
# define yyparse Rf_yyparse
/* Platform Dependent Gui Hooks */
#define R_CONSOLE 1
#define R_FILE 2
#define R_TEXT 3
/* The maximum length of input line which will be asked for */
#define CONSOLE_BUFFER_SIZE 1024
int R_ReadConsole(char*, unsigned char*, int, int);
void R_WriteConsole(char*, int);
void R_ResetConsole(void);
void R_FlushConsole(void);
void R_ClearerrConsole(void);
void R_Busy(int);
int R_ShowFiles(int, char **, char **, char *, Rboolean, char *);
int R_EditFiles(int, char **, char **, char *);
int R_ChooseFile(int, char*, int);
char* R_HomeDir(void);
Rboolean R_FileExists(char*);
Rboolean R_HiddenFile(char*);
double R_FileMtime(char*);
/* environment cell access */
typedef struct R_varloc_st *R_varloc_t;
R_varloc_t R_findVarLocInFrame(SEXP, SEXP);
SEXP R_GetVarLocValue(R_varloc_t);
SEXP R_GetVarLocSymbol(R_varloc_t);
Rboolean R_GetVarLocMISSING(R_varloc_t);
void R_SetVarLocValue(R_varloc_t, SEXP);
/* deparse option bits */
#define KEEPINTEGER 1
#define QUOTEEXPRESSIONS 2
#define SHOWATTRIBUTES 4
#define USESOURCE 8
#define WARNINCOMPLETE 16
#define DELAYPROMISES 32
/* common combinations of the above */
#define SIMPLEDEPARSE 0
#define FORSOURCING 31
/* Coercion functions */
int Rf_LogicalFromString(SEXP, int*);
int Rf_IntegerFromString(SEXP, int*);
double Rf_RealFromString(SEXP, int*);
Rcomplex Rf_ComplexFromString(SEXP, int*);
SEXP Rf_StringFromLogical(int, int*);
SEXP Rf_StringFromInteger(int, int*);
SEXP Rf_StringFromReal(double, int*);
SEXP Rf_StringFromComplex(Rcomplex, int*);
SEXP Rf_EnsureString(SEXP);
/* Other Internally Used Functions */
SEXP Rf_append(SEXP, SEXP); /* apparently unused now */
void begincontext(RCNTXT*, int, SEXP, SEXP, SEXP, SEXP, SEXP);
void checkArity(SEXP, SEXP);
void CheckFormals(SEXP);
void check_stack_balance(SEXP op, int save);
void CleanEd(void);
void copyListMatrix(SEXP, SEXP, Rboolean);
void copyMostAttribNoTs(SEXP, SEXP);
void CustomPrintValue(SEXP,SEXP);
void DataFrameClass(SEXP);
SEXP ddfindVar(SEXP, SEXP);
SEXP deparse1(SEXP,Rboolean,int);
SEXP deparse1line(SEXP,Rboolean);
int DispatchOrEval(SEXP, SEXP, char*, SEXP, SEXP, SEXP*, int, int);
int DispatchGroup(char*, SEXP,SEXP,SEXP,SEXP,SEXP*);
SEXP duplicated(SEXP);
SEXP dynamicfindVar(SEXP, RCNTXT*);
void endcontext(RCNTXT*);
int envlength(SEXP);
SEXP evalList(SEXP, SEXP, SEXP);
SEXP evalListKeepMissing(SEXP, SEXP);
int factorsConform(SEXP, SEXP);
void findcontext(int, SEXP, SEXP);
SEXP findVar1(SEXP, SEXP, SEXPTYPE, int);
void FrameClassFix(SEXP);
int framedepth(RCNTXT*);
SEXP frameSubscript(int, SEXP, SEXP);
int get1index(SEXP, SEXP, int, Rboolean, int);
SEXP getVar(SEXP, SEXP);
SEXP getVarInFrame(SEXP, SEXP);
int hashpjw(char*);
Rboolean InheritsClass(SEXP, char*);
void InitArithmetic(void);
void InitColors(void);
void InitConnections(void);
void InitEd(void);
void InitFunctionHashing(void);
void InitBaseEnv(void);
void InitGlobalEnv(void);
Rboolean R_current_trace_state();
Rboolean R_has_methods(SEXP);
void R_InitialData(void);
SEXP R_possible_dispatch(SEXP, SEXP, SEXP, SEXP);
void InitMemory(void);
void InitNames(void);
void InitOptions(void);
void Init_R_Variables(SEXP);
void InitTempDir(void);
void initStack(void);
void R_InsertRestartHandlers(RCNTXT *, Rboolean);
void internalTypeCheck(SEXP, SEXP, SEXPTYPE);
Rboolean isMethodsDispatchOn(void);
int isValidName(char *);
void R_JumpToContext(RCNTXT *, int, SEXP);
void jump_to_toplevel(void);
SEXP levelsgets(SEXP, SEXP);
void mainloop(void);
SEXP makeSubscript(SEXP, SEXP, int *);
SEXP mat2indsub(SEXP, SEXP);
SEXP matchArg(SEXP, SEXP*);
SEXP matchArgExact(SEXP, SEXP*);
SEXP matchArgs(SEXP, SEXP);
SEXP matchPar(char*, SEXP*);
void memtrace_report(SEXP, SEXP);
SEXP mkCLOSXP(SEXP, SEXP, SEXP);
/* SEXP mkComplex(char *s); */
/* SEXP mkEnv(SEXP, SEXP, SEXP); */
SEXP mkFalse(void);
/* SEXP mkFloat(char *s);
SEXP mkNA(void); */
SEXP mkPRIMSXP (int, int);
SEXP mkPROMISE(SEXP, SEXP);
SEXP mkQUOTE(SEXP);
SEXP mkSYMSXP(SEXP, SEXP);
SEXP mkTrue(void);
SEXP NewEnvironment(SEXP, SEXP, SEXP);
void onintr();
RETSIGTYPE onsigusr1(int);
RETSIGTYPE onsigusr2(int);
int OneIndex(SEXP, SEXP, int, int, SEXP*, int);
SEXP parse(FILE*, int);
void PrintDefaults(SEXP);
void PrintGreeting(void);
void PrintValueEnv(SEXP, SEXP);
void PrintValueRec(SEXP, SEXP);
void PrintVersion(char *);
void PrintVersionString(char *);
void PrintWarnings(void);
void process_site_Renviron();
void process_system_Renviron();
void process_user_Renviron();
SEXP promiseArgs(SEXP, SEXP);
void Rcons_vprintf(const char *, va_list);
void RemoveClass(SEXP, char *);
SEXP R_data_class(SEXP , Rboolean);
SEXP R_data_class2(SEXP);
SEXP R_LoadFromFile(FILE*, int);
SEXP R_NewHashedEnv(SEXP);
extern int R_Newhashpjw(char*);
FILE* R_OpenLibraryFile(char *);
char *R_LibraryFileName(char *, char *, size_t);
void R_RestoreGlobalEnv(void);
void R_RestoreGlobalEnvFromFile(const char *, Rboolean);
void R_SaveGlobalEnv(void);
void R_SaveGlobalEnvToFile(const char *);
void R_SaveToFile(SEXP, FILE*, int);
void R_SaveToFileV(SEXP, FILE*, int, int);
SEXP R_set_class(SEXP, SEXP, SEXP);
int R_SetOptionWarn(int);
int R_SetOptionWidth(int);
void R_Suicide(char*);
void sortVector(SEXP, Rboolean);
void ssort(SEXP*,int);
SEXPTYPE str2type(char*);
int StrToInternal(char*);
SEXP substituteList(SEXP, SEXP);
SEXP R_syscall(int,RCNTXT*);
int R_sysparent(int,RCNTXT*);
SEXP R_sysframe(int,RCNTXT*);
SEXP R_sysfunction(int,RCNTXT*);
Rboolean tsConform(SEXP,SEXP);
SEXP tspgets(SEXP, SEXP);
char * type2char(SEXPTYPE);
SEXP type2str(SEXPTYPE);
SEXP type2symbol(SEXPTYPE);
void unbindVar(SEXP, SEXP);
#ifdef ALLOW_OLD_SAVE
void unmarkPhase(void);
#endif
SEXP R_LookupMethod(SEXP, SEXP, SEXP, SEXP);
int usemethod(char*, SEXP, SEXP, SEXP, SEXP, SEXP, SEXP, SEXP*);
SEXP Rf_vectorSubscript(int, SEXP, int*, SEXP (*)(SEXP,SEXP),
SEXP (*)(SEXP, int), SEXP);
/* ../main/bind.c */
SEXP ItemName(SEXP, int);
/* ../main/errors.c : */
void ErrorMessage(SEXP, int, ...);
void WarningMessage(SEXP, R_WARNING, ...);
SEXP R_GetTraceback(int);
R_size_t R_GetMaxVSize(void);
void R_SetMaxVSize(R_size_t);
R_size_t R_GetMaxNSize(void);
void R_SetMaxNSize(R_size_t);
R_size_t R_Decode2Long(char *p, int *ierr);
void R_SetPPSize(R_size_t);
void R_run_onexits(RCNTXT *);
void R_restore_globals(RCNTXT *);
/* ../main/identical.c : */
Rboolean compute_identical(SEXP x, SEXP y);
/* ../../main/printutils.c : */
typedef enum {
Rprt_adj_left = 0,
Rprt_adj_right = 1,
Rprt_adj_centre = 2,
Rprt_adj_none = 3
} Rprt_adj;
int Rstrlen(SEXP, int);
char *EncodeRaw(Rbyte);
char *EncodeString(SEXP, int, int, Rprt_adj);
/* main/sort.c */
void orderVector1(int *indx, int n, SEXP key, Rboolean nalast,
Rboolean decreasing);
/* main/subset.c */
SEXP R_subset3_dflt(SEXP, SEXP);
/* main/subassign.c */
SEXP R_subassign3_dflt(SEXP, SEXP, SEXP, SEXP);
#ifdef SUPPORT_MBCS /* implies we have this header */
#include <wchar.h>
#endif
/* main/util.c */
void UNIMPLEMENTED_TYPE(char *s, SEXP x);
void UNIMPLEMENTED_TYPEt(char *s, SEXPTYPE t);
Rboolean utf8strIsASCII(char *str);
#ifdef SUPPORT_MBCS
typedef unsigned short ucs2_t;
size_t mbcsToUcs2(char *in, ucs2_t *out, int nout);
/* size_t mbcsMblen(char *in);
size_t ucs2ToMbcs(ucs2_t *in, char *out);
size_t ucs2Mblen(ucs2_t *in); */
int utf8clen(char c);
#define mbs_init(x) memset(x, 0, sizeof(mbstate_t))
size_t Mbrtowc(wchar_t *wc, const char *s, size_t n, mbstate_t *ps);
void mbcsToLatin1(char *in, char *out);
Rboolean mbcsValid(char *str);
char *Rf_strchr(const char *s, int c);
char *Rf_strrchr(const char *s, int c);
#else
#define Rf_strchr(s, c) strchr(s, c)
#define Rf_strrchr(s, c) strrchr(s, c)
#endif
#ifdef Win32
void R_fixslash(char *s);
void R_fixbackslash(char *s);
#endif
#if defined(Win32) && defined(SUPPORT_UTF8)
#define mbrtowc(a,b,c,d) Rmbrtowc(a,b)
#define wcrtomb(a,b,c) Rwcrtomb(a,b)
#define mbstowcs(a,b,c) Rmbstowcs(a,b,c)
#define wcstombs(a,b,c) Rwcstombs(a,b,c)
size_t Rmbrtowc(wchar_t *wc, const char *s);
size_t Rwcrtomb(char *s, const wchar_t wc);
size_t Rmbstowcs(wchar_t *wc, const char *s, size_t n);
size_t Rwcstombs(char *s, const wchar_t *wc, size_t n);
#endif
/* From localecharset.c */
extern char * locale2charset(const char *);
/* used in relop.c and sort.c */
#if defined(Win32) && defined(SUPPORT_UTF8)
#define STRCOLL Rstrcoll
#else
#ifdef HAVE_STRCOLL
#define STRCOLL strcoll
#else
#define STRCOLL strcmp
#endif
#endif
/* Localization */
#ifdef ENABLE_NLS
#include <libintl.h>
#ifdef Win32
#define _(String) libintl_gettext (String)
#undef gettext /* needed for graphapp */
#else
#define _(String) gettext (String)
#endif
#define gettext_noop(String) String
#define N_(String) gettext_noop (String)
#define P_(StringS, StringP, N) ngettext (StringS, StringP, N)
#else /* not NLS */
#define _(String) (String)
#define N_(String) String
#define P_(String, StringP, N) (N > 1 ? StringP: String)
#endif
/* Macros for suspending interrupts */
#define BEGIN_SUSPEND_INTERRUPTS do { \
Rboolean __oldsusp__ = R_interrupts_suspended; \
R_interrupts_suspended = TRUE;
#define END_SUSPEND_INTERRUPTS R_interrupts_suspended = __oldsusp__; \
if (R_interrupts_pending && ! R_interrupts_suspended) \
onintr(); \
} while(0)
/* FreeBSD defines alloca in stdlib.h, _and_ does not allow a definition
as here. (Since it uses GCC, it should use the first clause.) */
#ifdef __GNUC__
# undef alloca
# define alloca(x) __builtin_alloca((x))
#else
# ifdef HAVE_ALLOCA_H
# include <alloca.h>
# endif
# if !HAVE_DECL_ALLOCA && !defined(__FreeBSD__)
extern char *alloca(size_t);
# endif
#endif
/* Or use typedef? */
#ifdef HAVE_LONG_DOUBLE
# define LDOUBLE long double
#else
# define LDOUBLE double
#endif
#endif /* DEFN_H_ */
/*
*- Local Variables:
*- page-delimiter: "^/\\*---"
*- End:
*/
syntax highlighted by Code2HTML, v. 0.9.1