From d0eb2db581993e38b670ce6cdaa46ab7d1dd02b1 Mon Sep 17 00:00:00 2001 From: Oleksandr Nemesh Date: Sun, 22 Dec 2024 01:40:46 +0200 Subject: [PATCH] build with -Wall -Wextra -Werror --- .github/workflows/test.yml | 10 +++++++--- include/rift/value.hpp | 1 - src/config.cpp | 10 +++++----- src/lexer.cpp | 3 ++- src/parser.cpp | 4 ++-- src/script.cpp | 2 +- src/value.cpp | 4 ---- src/visitor.cpp | 10 +++++----- 8 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d3d10cf..049ea8f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,14 +18,18 @@ jobs: uses: actions/checkout@v4 - name: Install dependencies - run: sudo apt-get install -y ninja-build + run: | + # Install ninja + sudo apt-get install -y ninja-build + # Update clang to version 18 + sudo apt-get install -y clang-18 + sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-18 100 - name: Configure CMake project run: | mkdir build cd build - cmake .. -DRIFT_BUILD_TESTS=ON -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang \ - -G Ninja -DCMAKE_C_FLAGS="-Wall -Wextra -Werror" -DCMAKE_CXX_FLAGS="-Wall -Wextra -Werror -std=c++20" \ + cmake .. -DRIFT_BUILD_TESTS=ON -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -G Ninja -DCMAKE_CXX_FLAGS="-Wall -Wextra -Werror" - name: Build project run: cmake --build build diff --git a/include/rift/value.hpp b/include/rift/value.hpp index b0f007d..5b69236 100644 --- a/include/rift/value.hpp +++ b/include/rift/value.hpp @@ -206,7 +206,6 @@ namespace rift { Value operator-() const noexcept; Value at(const Value& key) const noexcept; - Value operator->*(const Value& key) const noexcept; // Object/Array access operators diff --git a/src/config.cpp b/src/config.cpp index 3076086..58463e3 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -10,7 +10,7 @@ namespace rift { // Cast functions int64_t intCast(int64_t value) noexcept { return value; } double floatCast(double value) noexcept { return value; } - std::string strCast(std::string value) noexcept { return std::move(value); } + std::string strCast(std::string value) noexcept { return value; } // String functions RuntimeFuncResult length(std::span args) noexcept { @@ -66,14 +66,14 @@ namespace rift { // Make sure the start index is within bounds if (start < 0) { start = 0; - } else if (start >= str.size()) { + } else if (start >= static_cast(str.size())) { return ""; } // Make sure the count is within bounds if (count < 0) { count = 0; - } else if (count > str.size() - start) { + } else if (count > static_cast(str.size()) - start) { count = str.size() - start; } @@ -232,7 +232,7 @@ namespace rift { return geode::Err("Expected at least one argument"); } - auto min = std::move(args[0]); + auto min = args[0]; for (size_t i = 1; i < args.size(); ++i) { if (args[i] < min) { min = std::move(args[i]); @@ -247,7 +247,7 @@ namespace rift { return geode::Err("Expected at least one argument"); } - auto max = std::move(args[0]); + auto max = args[0]; for (size_t i = 1; i < args.size(); ++i) { if (args[i] > max) { max = std::move(args[i]); diff --git a/src/lexer.cpp b/src/lexer.cpp index 442bad3..8daa8ca 100644 --- a/src/lexer.cpp +++ b/src/lexer.cpp @@ -20,7 +20,8 @@ namespace rift { if (peek() == '{') { if (m_index == start) { m_expressionDepth++; - return geode::Ok(Token { TokenType::LEFT_BRACE, m_index, ++m_index }); + m_index++; + return geode::Ok(Token { TokenType::LEFT_BRACE, m_index - 1, m_index }); } break; } diff --git a/src/parser.cpp b/src/parser.cpp index bf6c666..e80b583 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -235,7 +235,7 @@ namespace rift { // iterator auto expression = parseExpression(); if (expression.isErr()) { - return std::move(expression); + return expression; } // check for 'do' keyword @@ -252,7 +252,7 @@ namespace rift { // body auto body = parseExpression(); if (body.isErr()) { - return std::move(body); + return body; } // check for 'end' keyword diff --git a/src/script.cpp b/src/script.cpp index 8d17503..83ffac6 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -8,7 +8,7 @@ namespace rift { if (result.isErr()) { return geode::Err(std::move(result.unwrapErr())); } - return geode::Ok(std::move(result.unwrap().toString())); + return geode::Ok(result.unwrap().toString()); } EvalResult Script::eval(Object const &variables) const noexcept { diff --git a/src/value.cpp b/src/value.cpp index 9844a1f..2c79c81 100644 --- a/src/value.cpp +++ b/src/value.cpp @@ -602,10 +602,6 @@ namespace rift { } } - Value Value::operator->*(const Value& key) const noexcept { - return {}; - } - Value Value::operator[](size_t index) const noexcept { if (!isArray()) return {}; auto const& array = getArray(); diff --git a/src/visitor.cpp b/src/visitor.cpp index cb02139..c94193c 100644 --- a/src/visitor.cpp +++ b/src/visitor.cpp @@ -228,10 +228,10 @@ namespace rift { auto& var = node.getVarName(); auto iter = visit(node.getIterator()); if (iter.isErr()) { - return std::move(iter); + return iter; } - size_t maxIters = Config::get().maxLoopIterations(); + int64_t maxIters = Config::get().maxLoopIterations(); auto& iterValue = iter.unwrap(); std::string result; @@ -249,7 +249,7 @@ namespace rift { } break; case Value::Type::Array: { auto const& arr = iterValue.getArray(); - if (arr.size() > maxIters) { + if (static_cast(arr.size()) > maxIters) { return node.error(fmt::format("For loop: {} -> {} : {} exceeds max iterations", var, iter.unwrap().toString(), maxIters)); } for (auto const& val : arr) { @@ -263,7 +263,7 @@ namespace rift { } break; case Value::Type::Object: { auto const& obj = iterValue.getObject(); - if (obj.size() > maxIters) { + if (static_cast(obj.size()) > maxIters) { return node.error(fmt::format("For loop: {} -> {} : {} exceeds max iterations", var, iter.unwrap().toString(), maxIters)); } for (auto const& [key, val] : obj) { @@ -316,7 +316,7 @@ namespace rift { VisitorResult Visitor::visit(AssignNode const& node) noexcept { auto value = visit(*node.getValue()); if (value.isErr()) { - return std::move(value); + return value; } m_localVariables[node.getName()] = value.unwrap();