Browse Source

gcc compile

Signed-off-by: Rain Mark <rain.by.zhou@gmail.com>
main
Rain Mark 4 years ago
parent
commit
0f12dc61d7
  1. 2
      build.sh
  2. 0
      src/core.h
  3. 2
      src/lispoo.cpp
  4. 8
      src/lispoo.h

2
build.sh

@ -1,3 +1,3 @@
#!/bin/bash #!/bin/bash
g++ -std=c++17 -I. lispoo.cpp -o lispoo g++ -Werror -std=c++20 -Isrc src/lispoo.cpp -o lispoo

0
core.h → src/core.h

2
lispoo.cpp → src/lispoo.cpp

@ -15,7 +15,7 @@ int main(int argc, char* argv[]) {
ss << ifs.rdbuf(); ss << ifs.rdbuf();
lispoo::init(); lispoo::init();
unsigned long cursor = 0; long cursor = 0;
std::vector<std::string> tokens; std::vector<std::string> tokens;
lispoo::tokenize(ss.str(), tokens); lispoo::tokenize(ss.str(), tokens);
auto expr = lispoo::parse(tokens, cursor); auto expr = lispoo::parse(tokens, cursor);

8
lispoo.h → src/lispoo.h

@ -70,7 +70,7 @@ static const std::shared_ptr<Expr> nil = std::make_shared<Null>();
class List: public Expr { class List: public Expr {
public: public:
Type type() override { return Type::List; } Type type() override { return Type::List; }
std::vector<std::shared_ptr<Expr>>& value() { return value_; } const std::vector<std::shared_ptr<Expr>>& value() const { return value_; }
void append(const std::shared_ptr<Expr>& expr) { value_.emplace_back(expr); } void append(const std::shared_ptr<Expr>& expr) { value_.emplace_back(expr); }
private: private:
@ -162,7 +162,7 @@ inline void assert_type(const std::shared_ptr<Expr>& expr) {
oops("syntax error"); oops("syntax error");
} }
} }
inline void assert_len(const std::shared_ptr<Expr>& expr, unsigned long expect) { inline void assert_len(const std::shared_ptr<Expr>& expr, long expect) {
if (!is_type<Type::List>(expr)) { if (!is_type<Type::List>(expr)) {
oops("assert_len() failed, not List type"); oops("assert_len() failed, not List type");
} }
@ -190,7 +190,7 @@ inline void tokenize(const std::string& str, std::vector<std::string>& tokens) {
} }
} }
inline std::shared_ptr<Expr> parse_atom(const std::vector<std::string>& tokens, unsigned long& cursor) { inline std::shared_ptr<Expr> parse_atom(const std::vector<std::string>& tokens, long& cursor) {
auto token = tokens[cursor]; auto token = tokens[cursor];
auto type = Type::Symbol; auto type = Type::Symbol;
if (std::isdigit(token[0]) || token[0] == '-') { if (std::isdigit(token[0]) || token[0] == '-') {
@ -221,7 +221,7 @@ inline std::shared_ptr<Expr> parse_atom(const std::vector<std::string>& tokens,
return nil; return nil;
} }
inline std::shared_ptr<Expr> parse(const std::vector<std::string>& tokens, unsigned long& cursor) { inline std::shared_ptr<Expr> parse(const std::vector<std::string>& tokens, long& cursor) {
if (cursor >= tokens.size()) { if (cursor >= tokens.size()) {
oops("parse error"); oops("parse error");
} }
Loading…
Cancel
Save