/* * R : A Computer Language for Statistical Data Analysis * Copyright (C) 1998-2018 R 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, a copy is available at * https://www.R-project.org/Licenses/ */ /* Internal header, not installed */ #ifndef R_PARSE_H #define R_PARSE_H #define R_USE_SIGNALS 1 #include /*-> Defn.h */ /* Public interface */ #include // which includes SEXP R_ParseVector(SEXP, int, ParseStatus *, SEXP); /* Private interface */ typedef struct SrcRefState SrcRefState; struct SrcRefState { Rboolean keepSrcRefs; /* Whether to attach srcrefs to objects as they are parsed */ Rboolean keepParseData; /* Whether to attach also parse data to srcrefs */ Rboolean didAttach; /* Record of whether a srcref was attached */ SEXP data; /* Parse data as in sexps, also here for performance */ SEXP sexps; /* SrcRefs */ /* SrcFile The srcfile object currently being parsed */ /* Original The underlying srcfile object */ /* data (INTSXP) Detailed info on parse */ /* text (STRSXP)*/ /* ids (INTSXP)*/ /* svs (VECSEXP) Precious multi-set of semantic values */ int data_count; /* Position information about the current parse */ int xxlineno; /* Line number according to #line directives */ int xxcolno; /* Character number on line */ int xxbyteno; /* Byte number on line */ int xxparseno; /* Line number ignoring #line directives */ SrcRefState* prevState; }; void InitParser(void); void R_InitSrcRefState(RCNTXT *cntxt); void R_FinalizeSrcRefState(void); SEXP R_Parse1Buffer(IoBuffer*, int, ParseStatus *); /* in ReplIteration, R_ReplDLLdo1 */ SEXP R_ParseBuffer(IoBuffer*, int, ParseStatus *, SEXP, SEXP); /* in source.c */ SEXP R_Parse1File(FILE*, int, ParseStatus *); /* in R_ReplFile */ SEXP R_ParseFile(FILE*, int, ParseStatus *, SEXP); /* in edit.c */ #ifndef HAVE_RCONNECTION_TYPEDEF typedef struct Rconn *Rconnection; #define HAVE_RCONNECTION_TYPEDEF #endif SEXP R_ParseConn(Rconnection con, int n, ParseStatus *status, SEXP srcfile); /* Report a parse error */ void NORET parseError(SEXP call, int linenum); #endif /* not R_PARSE_H */