Skip to content

Feat/everything is an expr#655

Merged
SuperFola merged 5 commits intodevfrom
feat/everything-is-an-expr
Mar 13, 2026
Merged

Feat/everything is an expr#655
SuperFola merged 5 commits intodevfrom
feat/everything-is-an-expr

Conversation

@SuperFola
Copy link
Member

Description

Nearly everything should be treated as an expression, so now even let, mut, set, in-place list modifiers like @= and append!, return a value if needed.

Checklist

  • I have read the Contributor guide
  • My code follows the style guidelines of this project
  • I have commented my code, particularly in hard-to-understand areas
  • I have updated the documentation if needed (on https://github.com/ArkScript-lang/website, content/docs/)
  • I have added tests that prove my fix/feature is working
  • New and existing tests pass locally with my changes

@github-actions
Copy link

github-actions bot commented Mar 12, 2026

Static analysis report

Lizard report

Listing only functions with cyclomatic complexity >= 15 or NLOC >= 100 or parameters >= 6.

Filename Start line:end line Function name Parameters NLOC CCN
src/arkreactor/VM/VM.cpp 408:2117 Ark::VM::safeRun 3 1433 283
src/arkreactor/Compiler/BytecodeReader.cpp 297:721 Ark::BytecodeReader::display 4 375 113
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 200:304 Ark::internal::ASTLowerer::compileExpression 4 87 29
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 338:415 Ark::internal::ASTLowerer::compileListInstruction 3 62 29
src/arkreactor/VM/Debugger.cpp 248:324 Ark::internal::Debugger::prompt 4 70 19
src/arkreactor/VM/VM.cpp 2271:2365 Ark::VM::backtrace 3 81 19
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 762:814 Ark::internal::ASTLowerer::handleOperator 3 42 18
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 95:117 Ark::internal::ASTLowerer::nodeProducesOutput 1 18 17
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 482:560 Ark::internal::ASTLowerer::compileFunction 3 56 16
Report about files you didn't modify in this PR
Filename Start line:end line Function name Parameters NLOC CCN
src/arkreactor/Compiler/Macros/Processor.cpp 259:628 Ark::internal::MacroProcessor::evaluate 3 338 114
src/arkreactor/Error/Diagnostics.cpp 45:192 Ark::Diagnostics::makeContext 4 109 44
src/arkscript/main.cpp 24:383 main 2 310 43
src/arkscript/JsonCompiler.cpp 27:276 JsonCompiler::_compile 1 214 38
src/arkreactor/Compiler/NameResolution/NameResolutionPass.cpp 162:267 Ark::internal::NameResolutionPass::visitKeyword 3 85 35
src/arkreactor/Builtins/Slice.cpp 21:93 Ark::internal::Builtins::slice 1 63 34
src/arkreactor/Compiler/AST/Parser.cpp 841:932 Ark::internal::Parser::string 1 88 32
src/arkreactor/Compiler/AST/Node.cpp 179:285 Ark::internal::Node::repr 0 90 30
src/arkreactor/Compiler/Macros/Processor.cpp 107:191 Ark::internal::MacroProcessor::processNode 3 63 28
src/arkreactor/Compiler/AST/Node.cpp 287:368 Ark::internal::Node::debugPrint 1 70 26
src/arkreactor/TypeChecker.cpp 149:236 Ark::types::generateError 6 75 25
src/arkreactor/TypeChecker.cpp 32:147 Ark::types::displayContract 6 102 24
src/arkreactor/Compiler/NameResolution/NameResolutionPass.cpp 56:160 Ark::internal::NameResolutionPass::visit 2 83 23
src/arkreactor/Compiler/AST/Parser.cpp 289:417 Ark::internal::Parser::import_ 1 98 23
include/utf8.hpp 138:184 utf8::isValid 1 44 21
src/arkreactor/Compiler/AST/Optimizer.cpp 35:85 Ark::internal::Optimizer::countAndPruneDeadCode 1 42 20
src/arkreactor/VM/Value/Value.cpp 77:142 Ark::Value::toString 2 52 20
src/arkreactor/Compiler/NameResolution/StaticScope.cpp 68:109 Ark::internal::NamespaceScope::get 3 32 19
src/arkscript/Formatter.cpp 501:560 Formatter::formatCall 2 51 19
src/arkreactor/Builtins/String.cpp 46:112 fmt::formatter::parse 1 59 18
src/arkreactor/Compiler/AST/Optimizer.cpp 87:144 Ark::internal::Optimizer::pruneUnusedGlobalVariables 1 50 18
src/arkscript/Formatter.cpp 186:248 Formatter::format 3 59 18
src/arkreactor/Compiler/IntermediateRepresentation/IROptimizer.cpp 22:265 Ark::internal::IROptimizer::IROptimizer 1 224 17
src/arkreactor/Compiler/Macros/Executors/Function.cpp 16:89 Ark::internal::FunctionExecutor::applyMacro 2 56 17
include/Ark/Compiler/AST/Predicates.hpp 132:156 Ark::internal::IsSymbol::operator ( ) 1 24 16
src/arkscript/Formatter.cpp 298:339 Formatter::formatFunction 2 35 16
src/arkreactor/Compiler/Macros/Executors/Function.cpp 99:156 Ark::internal::FunctionExecutor::unify 5 50 15
src/arkreactor/Error/Diagnostics.cpp 194:211 Ark::Diagnostics::helper 7 17 2

CppCheck report

Filename Line Type Description
src/arkreactor/Compiler/BytecodeReader.cpp 477 style struct member 'Arg::kind' is never used.
src/arkreactor/VM/VM.cpp 282 error Iterators of different containers 'm_execution_contexts.emplace_back(std::make_unique())' and 'm_execution_contexts.front()' are used together.
Report files about files you didn't modify in this PR
Filename Line Type Description
include/Ark/VM/VM.inl 255 style Variable 'maybe_value_ptr' can be declared as pointer to const
src/arkreactor/Builtins/Bytecode.cpp 23 style Parameter 'vm' can be declared as pointer to const
src/arkreactor/Builtins/IO.cpp 165 style Consider using std::transform algorithm instead of a raw loop.
src/arkreactor/Compiler/IntermediateRepresentation/IROptimizer.cpp 254 style Consider using std::transform algorithm instead of a raw loop.
src/arkreactor/Compiler/IntermediateRepresentation/IROptimizer.cpp 261 style Consider using std::transform algorithm instead of a raw loop.
src/arkreactor/Compiler/NameResolution/ScopeResolver.cpp 134 style Consider using std::find_if algorithm instead of a raw loop.
include/Ark/VM/Value/Future.hpp 50 style Unused private function: 'Future::deleteSelfViaVM'
src/arkreactor/VM/Value/Future.cpp 23 performance Variable 'm_value' is assigned in constructor body. Consider performing initialization in initialization list.

@coveralls
Copy link

coveralls commented Mar 12, 2026

Pull Request Test Coverage Report for Build 23047011443

Details

  • 39 of 41 (95.12%) changed or added relevant lines in 3 files are covered.
  • 12 unchanged lines in 2 files lost coverage.
  • Overall coverage decreased (-0.09%) to 93.686%

Changes Missing Coverage Covered Lines Changed/Added Lines %
src/arkreactor/VM/VM.cpp 12 14 85.71%
Files with Coverage Reduction New Missed Lines %
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 6 96.0%
src/arkreactor/VM/Debugger.cpp 6 90.16%
Totals Coverage Status
Change from base Build 22870305923: -0.09%
Covered Lines: 9526
Relevant Lines: 10168

💛 - Coveralls

@codspeed-hq
Copy link

codspeed-hq bot commented Mar 12, 2026

Merging this PR will degrade performance by 2.71%

❌ 6 (👁 6) regressed benchmarks
✅ 12 untouched benchmarks

Performance Changes

Benchmark BASE HEAD Efficiency
👁 n_queens 114.2 ms 116.6 ms -2.08%
👁 create_closure 4.7 ms 4.8 ms -1.26%
👁 for_sum 1 s 1 s -1.17%
👁 ackermann 344.8 ms 352.9 ms -2.32%
👁 fibonacci 27.9 ms 28.7 ms -2.71%
👁 binary_trees 4.8 s 4.8 s -1.2%

Comparing feat/everything-is-an-expr (1b123c7) with dev (1ba43e0)

Open in CodSpeed

@github-actions
Copy link

github-actions bot commented Mar 12, 2026

Fuzzing report

/usr/local/bin/afl-whatsup status check tool for afl-fuzz by Michal Zalewski

Summary stats

    Fuzzers alive : 0
   Dead or remote : 1 (included in stats)
   Total run time : 5 minutes, 0 seconds
      Total execs : 45 thousands
 Cumulative speed : 152 execs/sec
    Pending items : 148 faves, 1288 total
 Coverage reached : 10.72%
    Crashes saved : 0
      Hangs saved : 0

Cycles without finds : 0
Time without finds : 0

[+] Captured 43177 tuples (map size 241024, highest value 255, total values 468418446) in '/dev/null'.
[+] A coverage of 43177 edges were achieved out of 241024 existing (17.91%) with 1299 input files.

@SuperFola SuperFola force-pushed the feat/everything-is-an-expr branch from 601ead9 to 1b123c7 Compare March 13, 2026 10:36
@SuperFola
Copy link
Member Author

Seems like regressions are due to either a change in the compiler (more malloc/free are used) or the architecture of the runner (got a notification it went from ARM to Intel Xeon).

@SuperFola SuperFola merged commit bb92c0d into dev Mar 13, 2026
32 checks passed
@SuperFola SuperFola deleted the feat/everything-is-an-expr branch March 13, 2026 10:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants