Skip to content

feat: append, concat and pop can be used as values#666

Merged
SuperFola merged 1 commit intodevfrom
fix/scope-error-on-list-insts
Mar 26, 2026
Merged

feat: append, concat and pop can be used as values#666
SuperFola merged 1 commit intodevfrom
fix/scope-error-on-list-insts

Conversation

@SuperFola
Copy link
Copy Markdown
Member

Description

Allow using append, concat and pop as values, like +, mod, / and others.

Add custom error messages when trying to use and/or as values.

Closes #665.

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
Copy Markdown

github-actions bot commented Mar 25, 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/Compiler/Lowerer/ASTLowerer.cpp 353:432 Ark::internal::ASTLowerer::compileListInstruction 3 64 32
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 838:984 Ark::internal::ASTLowerer::handleFunctionCall 3 114 30
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 211:315 Ark::internal::ASTLowerer::compileExpression 4 87 29
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 784:836 Ark::internal::ASTLowerer::handleOperator 3 42 18
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 106:128 Ark::internal::ASTLowerer::nodeProducesOutput 1 18 17
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 587:635 Ark::internal::ASTLowerer::compileLetMutSet 4 40 17
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 504:585 Ark::internal::ASTLowerer::compileFunction 3 59 16
Report about files you didn't modify in this PR
Filename Start line:end line Function name Parameters NLOC CCN
src/arkreactor/VM/VM.cpp 407:2156 Ark::VM::safeRun 3 1471 288
src/arkreactor/Compiler/Macros/Processor.cpp 259:634 Ark::internal::MacroProcessor::evaluate 3 344 115
src/arkreactor/Compiler/BytecodeReader.cpp 297:726 Ark::BytecodeReader::display 4 380 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/AST/Parser.cpp 289:417 Ark::internal::Parser::import_ 1 98 23
src/arkreactor/Compiler/NameResolution/NameResolutionPass.cpp 56:160 Ark::internal::NameResolutionPass::visit 2 83 23
include/utf8.hpp 138:184 utf8::isValid 1 44 21
src/arkreactor/VM/Value/Value.cpp 77:145 Ark::Value::toString 2 54 21
src/arkreactor/VM/VM.cpp 2310:2404 Ark::VM::backtrace 3 81 20
src/arkreactor/Compiler/AST/Optimizer.cpp 35:85 Ark::internal::Optimizer::countAndPruneDeadCode 1 42 20
src/arkreactor/VM/Debugger.cpp 251:327 Ark::internal::Debugger::prompt 4 70 19
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/Compiler/AST/Optimizer.cpp 87:144 Ark::internal::Optimizer::pruneUnusedGlobalVariables 1 50 18
src/arkreactor/Builtins/String.cpp 46:112 fmt::formatter::parse 1 59 18
src/arkscript/Formatter.cpp 186:248 Formatter::format 3 59 18
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/VM/VM.cpp 2168:2225 Ark::VM::throwArityError 4 47 15
src/arkreactor/Compiler/Macros/Executors/Function.cpp 99:156 Ark::internal::FunctionExecutor::unify 5 50 15
src/arkreactor/Compiler/IntermediateRepresentation/IROptimizer.cpp 22:260 Ark::internal::IROptimizer::IROptimizer 1 219 14
src/arkreactor/Error/Diagnostics.cpp 194:211 Ark::Diagnostics::helper 7 17 2

CppCheck report

Filename Line Type Description
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 610 style Consider using std::count_if algorithm instead of a raw loop.
Report files about files you didn't modify in this PR
Filename Line Type Description
include/Ark/VM/VM.inl 258 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/BytecodeReader.cpp 478 style struct member 'Arg::kind' is never used.
src/arkreactor/Compiler/IntermediateRepresentation/IROptimizer.cpp 249 style Consider using std::transform algorithm instead of a raw loop.
src/arkreactor/Compiler/IntermediateRepresentation/IROptimizer.cpp 256 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.
src/arkreactor/VM/VM.cpp 281 error Iterators of different containers 'm_execution_contexts.emplace_back(std::make_unique())' and 'm_execution_contexts.front()' are used together.
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.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 25, 2026

Super Instructions report

Some Super Instructions are under the usage threshold (10).

Super Instruction Uses in compiled code
INCREMENT 9
LT_CONST_JUMP_IF_FALSE 8
NEQ_SYM_JUMP_IF_FALSE 4
SET_VAL_TAIL 4
STORE_HEAD 2
MUL_BY 2
CHECK_TYPE_OF 2
NEQ_CONST_JUMP_IF_TRUE 2
GT_SYM_JUMP_IF_FALSE 1
SET_VAL_TAIL_BY_INDEX 1
SET_VAL_HEAD_BY_INDEX 1
MUL_SET_VAL 1
SET_VAL_HEAD 1
STORE_TAIL 1
Super Instructions over the threshold
Super Instruction Uses in compiled code
CALL_SYMBOL 3978
LOAD_CONST_LOAD_CONST 2477
LOAD_CONST_STORE 1732
LOAD_CONST_SET_VAL 648
CALL_BUILTIN 577
GET_FIELD_FROM_SYMBOL_INDEX 376
INCREMENT_STORE 374
AT_SYM_SYM 357
CALL_BUILTIN_WITHOUT_RETURN_ADDRESS 310
GET_FIELD_FROM_SYMBOL 277
STORE_LIST 260
CALL_SYMBOL_BY_INDEX 254
APPEND_IN_PLACE_SYM 230
LT_LEN_SYM_JUMP_IF_FALSE 205
LT_SYM_JUMP_IF_FALSE 107
SET_VAL_FROM_INDEX 101
EQ_SYM_INDEX_JUMP_IF_TRUE 96
SET_VAL_FROM 80
STORE_FROM_INDEX 78
FUSED_MATH 63
STORE_LEN 58
AT_SYM_INDEX_SYM_INDEX 54
LT_CONST_JUMP_IF_TRUE 52
CALL_CURRENT_PAGE 51
DECREMENT_BY_INDEX 46
EQ_CONST_JUMP_IF_TRUE 39
GT_CONST_JUMP_IF_TRUE 34
AT_SYM_INDEX_CONST 34
DECREMENT_STORE 31
GT_CONST_JUMP_IF_FALSE 27
MUL_BY_INDEX 26
STORE_HEAD_BY_INDEX 24
STORE_TAIL_BY_INDEX 23
DECREMENT 17
CHECK_TYPE_OF_BY_INDEX 17
APPEND_IN_PLACE_SYM_INDEX 15
STORE_FROM 14
INCREMENT_BY_INDEX 14

@coveralls
Copy link
Copy Markdown

coveralls commented Mar 25, 2026

Pull Request Test Coverage Report for Build 23582645769

Details

  • 55 of 55 (100.0%) changed or added relevant lines in 2 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage increased (+0.04%) to 93.755%

Totals Coverage Status
Change from base Build 23436433002: 0.04%
Covered Lines: 9699
Relevant Lines: 10345

💛 - Coveralls

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 25, 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 : 32 thousands
 Cumulative speed : 108 execs/sec
    Pending items : 157 faves, 1291 total
 Coverage reached : 10.04%
    Crashes saved : 0
      Hangs saved : 0

Cycles without finds : 0
Time without finds : 0

[+] Captured 43914 tuples (map size 243003, highest value 255, total values 481595850) in '/dev/null'.
[+] A coverage of 43914 edges were achieved out of 243008 existing (18.07%) with 1299 input files.

@SuperFola SuperFola force-pushed the fix/scope-error-on-list-insts branch from f764e8e to 7b109cf Compare March 26, 2026 07:29
@SuperFola SuperFola merged commit 7fe3a9b into dev Mar 26, 2026
33 checks passed
@SuperFola SuperFola deleted the fix/scope-error-on-list-insts branch March 26, 2026 07:41
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.

ScopeError with append, concat, etc.

2 participants