diff --git a/CMakeLists.txt b/CMakeLists.txt index 12c6a44..72975ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.27) +cmake_minimum_required(VERSION 3.20) project(psil) if (SANITIZE STREQUAL "YES") @@ -18,7 +18,7 @@ if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug") add_link_options(-O3) endif () -set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD 17) add_subdirectory(src) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b7abc67..856483f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ -set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_subdirectory(vm) diff --git a/src/vm/CMakeLists.txt b/src/vm/CMakeLists.txt index b7a5177..f0c3fbb 100644 --- a/src/vm/CMakeLists.txt +++ b/src/vm/CMakeLists.txt @@ -1,4 +1,4 @@ -set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_library(vm src/VM.cpp src/Cell.cpp diff --git a/src/vm/include/Cell.h b/src/vm/include/Cell.h index d3baa57..f86e2ed 100644 --- a/src/vm/include/Cell.h +++ b/src/vm/include/Cell.h @@ -11,6 +11,8 @@ #include #include #include +#include + enum class CellType { NUMATOM, STRATOM, diff --git a/src/vm/include/Compiler.h b/src/vm/include/Compiler.h index e071850..d272163 100644 --- a/src/vm/include/Compiler.h +++ b/src/vm/include/Compiler.h @@ -7,6 +7,7 @@ #include "Handle.h" + class Compiler { public: static Handle compile(Handle src, Handle fake_env = nullptr, Handle suffix = nullptr); diff --git a/src/vm/include/Handle.h b/src/vm/include/Handle.h index 2504850..34a3669 100644 --- a/src/vm/include/Handle.h +++ b/src/vm/include/Handle.h @@ -29,10 +29,6 @@ public: return dynamic_cast(*_target)._val == dynamic_cast(*rhs._target)._val; } else if (_target->_type == CellType::STRATOM) { return dynamic_cast(*_target)._val == dynamic_cast(*rhs._target)._val; - } else if (_target->_type == CellType::CONS) { - // This is questionable - return dynamic_cast(*_target)._car == dynamic_cast(*rhs._target)._car && - dynamic_cast(*_target)._cdr == dynamic_cast(*rhs._target)._cdr; } } return false; diff --git a/src/vm/include/MemoryContext.h b/src/vm/include/MemoryContext.h index 393b94e..7a9ea06 100644 --- a/src/vm/include/MemoryContext.h +++ b/src/vm/include/MemoryContext.h @@ -14,6 +14,7 @@ #include #include #include +#include #include "Cell.h" #include "Handle.h" diff --git a/src/vm/src/Compiler.cpp b/src/vm/src/Compiler.cpp index b046af2..76b0aa6 100644 --- a/src/vm/src/Compiler.cpp +++ b/src/vm/src/Compiler.cpp @@ -5,13 +5,14 @@ #include "Compiler.h" #include +#include Handle Compiler::compile(Handle src, Handle fake_env, Handle suffix) { Handle out; std::function compileArgsRaw = [&](Handle args) { Handle out; - while (args != nullptr) { + while (!args.null()) { out.splice(compile(args.car(), fake_env)); args = args.cdr(); } @@ -21,7 +22,7 @@ Handle Compiler::compile(Handle src, Handle fake_env, Handle suffix) { std::function compileArgsList = [&](Handle args, Handle env) { Handle out; out.append(Handle("NIL")); - while (args != nullptr) { + while (!args.null()) { out.splice(compile(args.car(), env)); out.append(Handle("CONS")); args = args.cdr(); @@ -74,7 +75,7 @@ Handle Compiler::compile(Handle src, Handle fake_env, Handle suffix) { Handle body = cdr.cdr().car(); - while (definitions != nullptr) { + while (!definitions.null()) { argBody.emplace_back(definitions.car().car(), definitions.car().cdr().car()); argNames.append(definitions.car().car()); argBodies.append(definitions.car().cdr().car()); @@ -116,11 +117,11 @@ Handle Compiler::findIndex(Handle symbol, Handle env) { Handle curFrame = env; - while (curFrame != nullptr) { + while (!curFrame.null()) { int64_t arg = 1; Handle curArg = curFrame.car(); - while (curArg != nullptr) { + while (!curArg.null()) { if (curArg.car() == symbol) return Handle::cons(frame, arg); curArg = curArg.cdr(); arg++; diff --git a/src/vm/src/Parser.cpp b/src/vm/src/Parser.cpp index f092892..91fe511 100644 --- a/src/vm/src/Parser.cpp +++ b/src/vm/src/Parser.cpp @@ -4,7 +4,6 @@ #include "Parser.h" -#include #include #include diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 26381c9..a36b033 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,4 +1,4 @@ -set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) include(FetchContent)