Browse Source

AST+Env: Add default constructor to Constant

master
Riyyi 1 year ago
parent
commit
f89e73d44a
  1. 4
      src/ast.h
  2. 10
      src/functions.cpp
  3. 2
      src/reader.cpp

4
src/ast.h

@ -201,7 +201,9 @@ public:
False,
};
Constant() = default;
Constant(State state);
Constant(bool state);
virtual ~Constant() = default;
State state() const { return m_state; }
@ -209,7 +211,7 @@ public:
private:
virtual bool isConstant() const override { return true; }
const State m_state;
const State m_state { State::Nil };
};
// -----------------------------------------

10
src/functions.cpp

@ -238,7 +238,7 @@ ADD_FUNCTION("pr-str", PRINTER_STRING(true, " "));
} \
print("\n"); \
\
return makePtr<Constant>(Constant::Nil); \
return makePtr<Constant>(); \
}
ADD_FUNCTION("prn", PRINTER_PRINT(true));
@ -478,6 +478,10 @@ ADD_FUNCTION(
{
CHECK_ARG_COUNT_IS("vec", nodes.size(), 1);
if (is<Vector>(nodes.front().get())) {
return nodes.front();
}
VALUE_CAST(collection, Collection, nodes.front());
return makePtr<Vector>(collection->nodes());
@ -515,13 +519,13 @@ ADD_FUNCTION(
if (is<Constant>(nodes.front().get())
&& std::static_pointer_cast<Constant>(nodes.front())->state() == Constant::Nil) {
return makePtr<Constant>(Constant::Nil);
return makePtr<Constant>();
}
VALUE_CAST(collection, Collection, nodes.front());
auto collection_nodes = collection->nodes();
return (collection_nodes.empty()) ? makePtr<Constant>(Constant::Nil) : collection_nodes.front();
return (collection_nodes.empty()) ? makePtr<Constant>() : collection_nodes.front();
});
// (rest (list 1 2 3))

2
src/reader.cpp

@ -191,7 +191,7 @@ ValuePtr Reader::readHashMap()
}
if (!is<String>(key.get()) && !is<Keyword>(key.get())) {
Error::the().add(format("{} is not a string or keyword", key));
Error::the().add(format("wrong argument type: string or keyword, {}", key));
return nullptr;
}

Loading…
Cancel
Save