about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--third_party/nix/src/libexpr/CMakeLists.txt1
-rw-r--r--third_party/nix/src/libexpr/parser.hh47
-rw-r--r--third_party/nix/src/libexpr/parser.y55
3 files changed, 49 insertions, 54 deletions
diff --git a/third_party/nix/src/libexpr/CMakeLists.txt b/third_party/nix/src/libexpr/CMakeLists.txt
index 02bedc46fd..d2e991657b 100644
--- a/third_party/nix/src/libexpr/CMakeLists.txt
+++ b/third_party/nix/src/libexpr/CMakeLists.txt
@@ -29,6 +29,7 @@ set(HEADER_FILES
     json-to-value.hh
     names.hh
     nixexpr.hh
+    parser.hh
     primops.hh
     symbol-table.hh
     value.hh
diff --git a/third_party/nix/src/libexpr/parser.hh b/third_party/nix/src/libexpr/parser.hh
new file mode 100644
index 0000000000..ae0e932147
--- /dev/null
+++ b/third_party/nix/src/libexpr/parser.hh
@@ -0,0 +1,47 @@
+// Parser utilities for use in parser.y
+#pragma once
+
+// TODO(tazjin): Audit these includes, they were in parser.y
+#include <optional>
+#include <variant>
+
+#include <glog/logging.h>
+
+#include "libexpr/eval.hh"
+#include "libexpr/nixexpr.hh"
+#include "libutil/util.hh"
+
+#define YY_DECL                                                               \
+  int yylex(YYSTYPE* yylval_param, YYLTYPE* yylloc_param, yyscan_t yyscanner, \
+            nix::ParseData* data)
+
+namespace nix {
+
+struct ParseData {
+  EvalState& state;
+  SymbolTable& symbols;
+  Expr* result;
+  Path basePath;
+  std::optional<Symbol> path;
+  std::string error;
+  Symbol sLetBody;
+
+  ParseData(EvalState& state)
+      : state(state),
+        symbols(state.symbols),
+        sLetBody(symbols.Create("<let-body>")){};
+};
+
+// TODO(tazjin): move dupAttr to anonymous namespace
+static void dupAttr(const AttrPath& attrPath, const Pos& pos,
+                    const Pos& prevPos) {
+  throw ParseError(format("attribute '%1%' at %2% already defined at %3%") %
+                   showAttrPath(attrPath) % pos % prevPos);
+}
+
+static void dupAttr(Symbol attr, const Pos& pos, const Pos& prevPos) {
+  throw ParseError(format("attribute '%1%' at %2% already defined at %3%") %
+                   attr % pos % prevPos);
+}
+
+}  // namespace nix
diff --git a/third_party/nix/src/libexpr/parser.y b/third_party/nix/src/libexpr/parser.y
index 2ea84fea66..9df9b3081a 100644
--- a/third_party/nix/src/libexpr/parser.y
+++ b/third_party/nix/src/libexpr/parser.y
@@ -11,44 +11,7 @@
 %expect 1
 %expect-rr 1
 
-%code requires {
-
-#ifndef BISON_HEADER
-#define BISON_HEADER
-
-#include <optional>
-#include <variant>
-#include "libutil/util.hh"
-#include "libexpr/nixexpr.hh"
-#include "libexpr/eval.hh"
-#include <glog/logging.h>
-
-namespace nix {
-
-    struct ParseData
-    {
-        EvalState & state;
-        SymbolTable & symbols;
-        Expr* result;
-        Path basePath;
-        std::optional<Symbol> path;
-        std::string error;
-        Symbol sLetBody;
-        ParseData(EvalState & state)
-            : state(state)
-            , symbols(state.symbols)
-            , sLetBody(symbols.Create("<let-body>"))
-            { };
-    };
-
-}
-
-#define YY_DECL int yylex \
-    (YYSTYPE * yylval_param, YYLTYPE * yylloc_param, yyscan_t yyscanner, nix::ParseData * data)
-
-#endif
-
-}
+%code requires { #include "libexpr/parser.hh" }
 
 %{
 
@@ -59,24 +22,8 @@ YY_DECL;
 
 using namespace nix;
 
-
 namespace nix {
 
-
-static void dupAttr(const AttrPath & attrPath, const Pos & pos, const Pos & prevPos)
-{
-    throw ParseError(format("attribute '%1%' at %2% already defined at %3%")
-        % showAttrPath(attrPath) % pos % prevPos);
-}
-
-
-static void dupAttr(Symbol attr, const Pos & pos, const Pos & prevPos)
-{
-    throw ParseError(format("attribute '%1%' at %2% already defined at %3%")
-        % attr % pos % prevPos);
-}
-
-
 static void addAttr(ExprAttrs * attrs, AttrPath & attrPath,
     Expr * e, const Pos & pos)
 {