aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpennae <github@quasiparticle.net>2022-03-05 14:20:25 +0100
committerpennae <github@quasiparticle.net>2022-04-21 21:25:18 +0200
commitff0fd91ed23ae9d851bf27c4df3ec77f7028699b (patch)
treea9107f76daeacec74f9695678c9db429e789ec41
parent90b5c0a1a67c31a3f2553fef110417e4ba1b635d (diff)
remove Symbol::empty
the only use of this function is to determine whether a lambda has a non-set formal, but this use is arguably better served by Symbol::set and using a non-Symbol instead of an empty symbol in the parser when no such formal is present.
-rw-r--r--src/libexpr/eval.cc4
-rw-r--r--src/libexpr/nixexpr.cc8
-rw-r--r--src/libexpr/parser.y2
-rw-r--r--src/libexpr/symbol-table.hh5
-rw-r--r--src/libexpr/value-to-xml.cc2
5 files changed, 8 insertions, 13 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index a5eb2e473..b39b24227 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -1342,7 +1342,7 @@ void EvalState::callFunction(Value & fun, size_t nrArgs, Value * * args, Value &
ExprLambda & lambda(*vCur.lambda.fun);
auto size =
- (lambda.arg.empty() ? 0 : 1) +
+ (!lambda.arg.set() ? 0 : 1) +
(lambda.hasFormals() ? lambda.formals->formals.size() : 0);
Env & env2(allocEnv(size));
env2.up = vCur.lambda.env;
@@ -1355,7 +1355,7 @@ void EvalState::callFunction(Value & fun, size_t nrArgs, Value * * args, Value &
else {
forceAttrs(*args[0], pos);
- if (!lambda.arg.empty())
+ if (lambda.arg.set())
env2.values[displ++] = args[0];
/* For each formal argument, get the actual argument. If
diff --git a/src/libexpr/nixexpr.cc b/src/libexpr/nixexpr.cc
index a2def65a6..bf01935a9 100644
--- a/src/libexpr/nixexpr.cc
+++ b/src/libexpr/nixexpr.cc
@@ -144,9 +144,9 @@ void ExprLambda::show(std::ostream & str) const
str << "...";
}
str << " }";
- if (!arg.empty()) str << " @ ";
+ if (arg.set()) str << " @ ";
}
- if (!arg.empty()) str << arg;
+ if (arg.set()) str << arg;
str << ": " << *body << ")";
}
@@ -364,11 +364,11 @@ void ExprLambda::bindVars(const StaticEnv & env)
StaticEnv newEnv(
false, &env,
(hasFormals() ? formals->formals.size() : 0) +
- (arg.empty() ? 0 : 1));
+ (!arg.set() ? 0 : 1));
Displacement displ = 0;
- if (!arg.empty()) newEnv.vars.emplace_back(arg, displ++);
+ if (arg.set()) newEnv.vars.emplace_back(arg, displ++);
if (hasFormals()) {
for (auto & i : formals->formals)
diff --git a/src/libexpr/parser.y b/src/libexpr/parser.y
index 919b9cfae..49c401603 100644
--- a/src/libexpr/parser.y
+++ b/src/libexpr/parser.y
@@ -369,7 +369,7 @@ expr_function
: ID ':' expr_function
{ $$ = new ExprLambda(CUR_POS, data->symbols.create($1), 0, $3); }
| '{' formals '}' ':' expr_function
- { $$ = new ExprLambda(CUR_POS, data->symbols.create(""), toFormals(*data, $2), $5); }
+ { $$ = new ExprLambda(CUR_POS, {}, toFormals(*data, $2), $5); }
| '{' formals '}' '@' ID ':' expr_function
{
Symbol arg = data->symbols.create($5);
diff --git a/src/libexpr/symbol-table.hh b/src/libexpr/symbol-table.hh
index 48d20c29d..297605295 100644
--- a/src/libexpr/symbol-table.hh
+++ b/src/libexpr/symbol-table.hh
@@ -60,11 +60,6 @@ public:
return s;
}
- bool empty() const
- {
- return s->empty();
- }
-
friend std::ostream & operator << (std::ostream & str, const Symbol & sym);
};
diff --git a/src/libexpr/value-to-xml.cc b/src/libexpr/value-to-xml.cc
index afeaf5694..7f8edcba6 100644
--- a/src/libexpr/value-to-xml.cc
+++ b/src/libexpr/value-to-xml.cc
@@ -139,7 +139,7 @@ static void printValueAsXML(EvalState & state, bool strict, bool location,
if (v.lambda.fun->hasFormals()) {
XMLAttrs attrs;
- if (!v.lambda.fun->arg.empty()) attrs["name"] = v.lambda.fun->arg;
+ if (v.lambda.fun->arg.set()) attrs["name"] = v.lambda.fun->arg;
if (v.lambda.fun->formals->ellipsis) attrs["ellipsis"] = "1";
XMLOpenElement _(doc, "attrspat", attrs);
for (auto & i : v.lambda.fun->formals->lexicographicOrder())