diff --git a/build.sh b/build.sh index 2798482..9894bb1 100755 --- a/build.sh +++ b/build.sh @@ -1,3 +1,3 @@ #!/bin/bash -g++ -std=c++17 -I. lispoo.cpp -o lispoo +g++ -Werror -std=c++20 -Isrc src/lispoo.cpp -o lispoo diff --git a/core.h b/src/core.h similarity index 100% rename from core.h rename to src/core.h diff --git a/lispoo.cpp b/src/lispoo.cpp similarity index 94% rename from lispoo.cpp rename to src/lispoo.cpp index 05ddcae..6b1a1f9 100644 --- a/lispoo.cpp +++ b/src/lispoo.cpp @@ -15,7 +15,7 @@ int main(int argc, char* argv[]) { ss << ifs.rdbuf(); lispoo::init(); - unsigned long cursor = 0; + long cursor = 0; std::vector tokens; lispoo::tokenize(ss.str(), tokens); auto expr = lispoo::parse(tokens, cursor); diff --git a/lispoo.h b/src/lispoo.h similarity index 96% rename from lispoo.h rename to src/lispoo.h index d7334fb..f391411 100644 --- a/lispoo.h +++ b/src/lispoo.h @@ -70,7 +70,7 @@ static const std::shared_ptr nil = std::make_shared(); class List: public Expr { public: Type type() override { return Type::List; } - std::vector>& value() { return value_; } + const std::vector>& value() const { return value_; } void append(const std::shared_ptr& expr) { value_.emplace_back(expr); } private: @@ -162,7 +162,7 @@ inline void assert_type(const std::shared_ptr& expr) { oops("syntax error"); } } -inline void assert_len(const std::shared_ptr& expr, unsigned long expect) { +inline void assert_len(const std::shared_ptr& expr, long expect) { if (!is_type(expr)) { oops("assert_len() failed, not List type"); } @@ -190,7 +190,7 @@ inline void tokenize(const std::string& str, std::vector& tokens) { } } -inline std::shared_ptr parse_atom(const std::vector& tokens, unsigned long& cursor) { +inline std::shared_ptr parse_atom(const std::vector& tokens, long& cursor) { auto token = tokens[cursor]; auto type = Type::Symbol; if (std::isdigit(token[0]) || token[0] == '-') { @@ -221,7 +221,7 @@ inline std::shared_ptr parse_atom(const std::vector& tokens, return nil; } -inline std::shared_ptr parse(const std::vector& tokens, unsigned long& cursor) { +inline std::shared_ptr parse(const std::vector& tokens, long& cursor) { if (cursor >= tokens.size()) { oops("parse error"); }