blob: 349084b295c1c938f9eb98601a0a7262b60d93ec [file] [log] [blame]
/*
* 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 <IOStuff.h> /*-> Defn.h */
/* Public interface */
#include <R_ext/Parse.h>
// 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 */