mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-29 17:16:15 +02:00
libexpr: Rearrange lexer files so that yylex_init_extra can be found
This commit is contained in:
parent
7fae378835
commit
e68234c4f9
4 changed files with 51 additions and 34 deletions
31
src/libexpr/lexer-helpers.cc
Normal file
31
src/libexpr/lexer-helpers.cc
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
#include "lexer-tab.hh"
|
||||||
|
#include "lexer-helpers.hh"
|
||||||
|
#include "parser-tab.hh"
|
||||||
|
|
||||||
|
void nix::lexer::internal::initLoc(YYLTYPE * loc)
|
||||||
|
{
|
||||||
|
loc->first_line = loc->last_line = 0;
|
||||||
|
loc->first_column = loc->last_column = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void nix::lexer::internal::adjustLoc(yyscan_t yyscanner, YYLTYPE * loc, const char * s, size_t len)
|
||||||
|
{
|
||||||
|
loc->stash();
|
||||||
|
|
||||||
|
LexerState & lexerState = *yyget_extra(yyscanner);
|
||||||
|
|
||||||
|
if (lexerState.docCommentDistance == 1) {
|
||||||
|
// Preceding token was a doc comment.
|
||||||
|
ParserLocation doc;
|
||||||
|
doc.first_column = lexerState.lastDocCommentLoc.first_column;
|
||||||
|
ParserLocation docEnd;
|
||||||
|
docEnd.first_column = lexerState.lastDocCommentLoc.last_column;
|
||||||
|
DocComment docComment{lexerState.at(doc), lexerState.at(docEnd)};
|
||||||
|
PosIdx locPos = lexerState.at(*loc);
|
||||||
|
lexerState.positionToDocComment.emplace(locPos, docComment);
|
||||||
|
}
|
||||||
|
lexerState.docCommentDistance++;
|
||||||
|
|
||||||
|
loc->first_column = loc->last_column;
|
||||||
|
loc->last_column += len;
|
||||||
|
}
|
9
src/libexpr/lexer-helpers.hh
Normal file
9
src/libexpr/lexer-helpers.hh
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace nix::lexer::internal {
|
||||||
|
|
||||||
|
void initLoc(YYLTYPE * loc);
|
||||||
|
|
||||||
|
void adjustLoc(yyscan_t yyscanner, YYLTYPE * loc, const char * s, size_t len);
|
||||||
|
|
||||||
|
} // namespace nix::lexer
|
|
@ -14,6 +14,10 @@
|
||||||
%x INPATH_SLASH
|
%x INPATH_SLASH
|
||||||
%x PATH_START
|
%x PATH_START
|
||||||
|
|
||||||
|
%top {
|
||||||
|
#include "parser-tab.hh" // YYSTYPE
|
||||||
|
#include "parser-state.hh"
|
||||||
|
}
|
||||||
|
|
||||||
%{
|
%{
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
|
@ -22,48 +26,19 @@
|
||||||
|
|
||||||
#include "nixexpr.hh"
|
#include "nixexpr.hh"
|
||||||
#include "parser-tab.hh"
|
#include "parser-tab.hh"
|
||||||
|
#include "lexer-helpers.hh"
|
||||||
|
|
||||||
// !!! FIXME !!!
|
namespace nix {
|
||||||
#define YY_EXTRA_TYPE ::nix::LexerState *
|
struct LexerState;
|
||||||
int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
|
}
|
||||||
YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner );
|
|
||||||
#undef YY_EXTRA_TYPE
|
|
||||||
|
|
||||||
using namespace nix;
|
using namespace nix;
|
||||||
|
using namespace nix::lexer::internal;
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
#define CUR_POS state->at(*yylloc)
|
#define CUR_POS state->at(*yylloc)
|
||||||
|
|
||||||
static void initLoc(YYLTYPE * loc)
|
|
||||||
{
|
|
||||||
loc->first_line = loc->last_line = 0;
|
|
||||||
loc->first_column = loc->last_column = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void adjustLoc(yyscan_t yyscanner, YYLTYPE * loc, const char * s, size_t len)
|
|
||||||
{
|
|
||||||
loc->stash();
|
|
||||||
|
|
||||||
LexerState & lexerState = *yyget_extra(yyscanner);
|
|
||||||
|
|
||||||
if (lexerState.docCommentDistance == 1) {
|
|
||||||
// Preceding token was a doc comment.
|
|
||||||
ParserLocation doc;
|
|
||||||
doc.first_column = lexerState.lastDocCommentLoc.first_column;
|
|
||||||
ParserLocation docEnd;
|
|
||||||
docEnd.first_column = lexerState.lastDocCommentLoc.last_column;
|
|
||||||
DocComment docComment{lexerState.at(doc), lexerState.at(docEnd)};
|
|
||||||
PosIdx locPos = lexerState.at(*loc);
|
|
||||||
lexerState.positionToDocComment.emplace(locPos, docComment);
|
|
||||||
}
|
|
||||||
lexerState.docCommentDistance++;
|
|
||||||
|
|
||||||
loc->first_column = loc->last_column;
|
|
||||||
loc->last_column += len;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// we make use of the fact that the parser receives a private copy of the input
|
// we make use of the fact that the parser receives a private copy of the input
|
||||||
// string and can munge around in it.
|
// string and can munge around in it.
|
||||||
static StringToken unescapeStr(SymbolTable & symbols, char * s, size_t length)
|
static StringToken unescapeStr(SymbolTable & symbols, char * s, size_t length)
|
||||||
|
|
|
@ -139,6 +139,7 @@ sources = files(
|
||||||
'function-trace.cc',
|
'function-trace.cc',
|
||||||
'get-drvs.cc',
|
'get-drvs.cc',
|
||||||
'json-to-value.cc',
|
'json-to-value.cc',
|
||||||
|
'lexer-helpers.cc',
|
||||||
'nixexpr.cc',
|
'nixexpr.cc',
|
||||||
'paths.cc',
|
'paths.cc',
|
||||||
'primops.cc',
|
'primops.cc',
|
||||||
|
@ -165,6 +166,7 @@ headers = [config_h] + files(
|
||||||
'gc-small-vector.hh',
|
'gc-small-vector.hh',
|
||||||
'get-drvs.hh',
|
'get-drvs.hh',
|
||||||
'json-to-value.hh',
|
'json-to-value.hh',
|
||||||
|
# internal: 'lexer-helpers.hh',
|
||||||
'nixexpr.hh',
|
'nixexpr.hh',
|
||||||
'parser-state.hh',
|
'parser-state.hh',
|
||||||
'pos-idx.hh',
|
'pos-idx.hh',
|
||||||
|
|
Loading…
Reference in a new issue