Skip to content

Conversation

@SuperFola
Copy link
Member

@SuperFola SuperFola commented Mar 21, 2025

Description

Add a new instruction to reference locals by their id on the locals' stack. This yields a 2% performance improvement globally.

Closes #499

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
  • 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 21, 2025

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 326:1566 Ark::VM::safeRun 3 1027 210
src/arkreactor/Compiler/Macros/Processor.cpp 235:608 Ark::internal::MacroProcessor::evaluate 3 350 124
src/arkreactor/Compiler/BytecodeReader.cpp 202:453 Ark::BytecodeReader::display 4 216 76
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 471:645 Ark::internal::ASTLowerer::handleCalls 5 143 44
src/arkreactor/Compiler/Macros/Processor.cpp 102:185 Ark::internal::MacroProcessor::processNode 3 61 27
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 127:229 Ark::internal::ASTLowerer::compileExpression 5 84 27
src/arkreactor/Compiler/AST/Parser.cpp 272:406 Ark::internal::Parser::import_ 0 108 23
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 255:312 Ark::internal::ASTLowerer::compileListInstruction 4 47 22
src/arkreactor/Compiler/Macros/Processor.cpp 690:729 Ark::internal::MacroProcessor::isConstEval 1 35 16
src/arkreactor/Exceptions.cpp 86:130 Ark::Diagnostics::makeContext 6 35 15
src/arkreactor/Exceptions.cpp 133:146 Ark::Diagnostics::helper 9 12 4
Report about files you didn't modify in this PR
Filename Start line:end line Function name Parameters NLOC CCN
src/arkscript/JsonCompiler.cpp 27:257 JsonCompiler::_compile 1 198 37
include/Ark/Compiler/AST/Parser.hpp 105:194 Ark::internal::ARK_APIParser::string 0 87 32
src/arkreactor/Compiler/NameResolution/NameResolutionPass.cpp 160:267 Ark::internal::NameResolutionPass::visitKeyword 3 89 32
src/arkscript/main.cpp 17:346 main 2 284 31
src/arkreactor/Compiler/AST/Node.cpp 233:306 Ark::internal::Node::debugPrint 1 64 24
src/arkreactor/Compiler/NameResolution/NameResolutionPass.cpp 55:158 Ark::internal::NameResolutionPass::visit 2 84 23
src/arkscript/REPL/Utils.cpp 46:173 Ark::internal::getColorPerKeyword 0 106 22
include/utf8.hpp 138:184 utf8::isValid 1 44 21
src/arkreactor/Compiler/AST/Optimizer.cpp 33:83 Ark::internal::Optimizer::countAndPruneDeadCode 1 42 20
src/arkreactor/Compiler/AST/Node.cpp 160:231 Ark::internal::Node::repr 0 59 18
src/arkreactor/Compiler/NameResolution/StaticScope.cpp 67:108 Ark::internal::NamespaceScope::get 2 32 18
src/arkreactor/Compiler/Macros/Executors/Function.cpp 16:88 Ark::internal::FunctionExecutor::applyMacro 2 55 17
src/arkreactor/VM/Value.cpp 67:125 Ark::Value::toString 1 46 17
include/Ark/Compiler/AST/Predicates.hpp 132:156 Ark::internal::IsSymbol::operator ( ) 1 24 16
src/arkscript/Formatter.cpp 168:224 Formatter::format 3 53 16
src/arkreactor/TypeChecker.cpp 28:85 Ark::types::displayContract 2 51 15
include/Ark/Exceptions.hpp 92:101 Ark::ARK_APICodeError::CodeError 6 10 1

CppCheck report

Filename Line Type Description
include/Ark/VM/VM.inl 357 style Variable 'c' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 22 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 42 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 65 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 85 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 106 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 127 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 151 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 175 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 196 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 217 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 237 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 257 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 277 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 294 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 311 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 328 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 345 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 362 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 379 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/Mathematics.cpp 401 style Parameter 'n' can be declared as reference to const
src/arkreactor/Compiler/AST/Parser.cpp 158 style Local variable 'symbol' shadows outer function
src/arkreactor/Compiler/AST/Parser.cpp 188 style Local variable 'symbol' shadows outer function
src/arkreactor/Compiler/AST/Parser.cpp 212 style Local variable 'condition' shadows outer function
src/arkreactor/Compiler/AST/Parser.cpp 255 style Local variable 'condition' shadows outer function
src/arkreactor/Compiler/AST/Parser.cpp 365 style Local variable 'symbol' shadows outer function
src/arkreactor/Compiler/AST/Parser.cpp 471 style Local variable 'node' shadows outer function
src/arkreactor/Compiler/AST/Parser.cpp 478 style Local variable 'symbol' shadows outer function
src/arkreactor/Compiler/AST/Parser.cpp 487 style Local variable 'node' shadows outer function
src/arkreactor/Compiler/AST/Parser.cpp 584 style Local variable 'condition' shadows outer function
src/arkreactor/Compiler/AST/Parser.cpp 692 style Local variable 'symbol' shadows outer function
src/arkreactor/Compiler/AST/Parser.cpp 761 style Local variable 'atom' shadows outer function
src/arkreactor/Compiler/BytecodeReader.cpp 336 style struct member 'Arg::kind' is never used.
src/arkreactor/Compiler/IntermediateRepresentation/IROptimizer.cpp 18 performance Variable 'm_ruleset_two' is assigned in constructor body. Consider performing initialization in initialization list.
src/arkreactor/Compiler/IntermediateRepresentation/IROptimizer.cpp 12 style struct member 'EntityWithOffset::offset' is never used.
src/arkreactor/Compiler/Macros/Processor.cpp 69 warning Assert statement calls a function which may have desired side effects: 'list'.
src/arkreactor/Compiler/Macros/Processor.cpp 568 style Local variable 'ast' shadows outer function
src/arkreactor/VM/VM.cpp 456 style Statements following 'goto' will never be executed.
src/arkreactor/VM/VM.cpp 1608 style Variable 'ip' can be declared as pointer to const
src/arkreactor/VM/VM.cpp 364 error syntax error
Report files about files you didn't modify in this PR
Filename Line Type Description
include/Ark/Compiler/AST/Node.hpp 35 warning Member variable 'Node::m_type' is not initialized in the constructor.
include/Ark/Compiler/NameResolution/StaticScope.hpp 152 style Consider using std::any_of algorithm instead of a raw loop.
src/arkreactor/Builtins/IO.cpp 26 style Variable 'value' can be declared as reference to const
src/arkreactor/Builtins/IO.cpp 45 style Variable 'value' can be declared as reference to const
src/arkreactor/Builtins/IO.cpp 61 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/IO.cpp 147 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/IO.cpp 172 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/IO.cpp 192 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/IO.cpp 218 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/IO.cpp 238 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/IO.cpp 260 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/String.cpp 166 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/System.cpp 43 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/System.cpp 75 style Parameter 'n' can be declared as reference to const
src/arkreactor/Builtins/System.cpp 99 style Parameter 'n' can be declared as reference to const
src/arkreactor/Compiler/AST/BaseParser.cpp 29 style Local variable 'next' shadows outer function
src/arkreactor/Compiler/AST/Node.cpp 33 performance Function parameter 'namespace_' should be passed by const reference.
src/arkreactor/Compiler/AST/Optimizer.cpp 54 warning Either the condition 'node.constList().size()>1' is redundant or node.constList() size can be 2. Expression 'node.constList()[2]' cause access out of bounds.
src/arkreactor/Compiler/IntermediateRepresentation/Entity.cpp 22 style Local variable 'label' shadows outer function
src/arkreactor/Compiler/NameResolution/NameResolutionPass.cpp 141 style Consider using std::find_if algorithm instead of a raw loop.
src/arkreactor/Compiler/NameResolution/ScopeResolver.cpp 55 style Consider using std::any_of algorithm instead of a raw loop.
src/arkreactor/VM/State.cpp 57 style Variable 'p' can be declared as reference to const
src/arkreactor/VM/State.cpp 106 style Variable 'p' can be declared as reference to const
src/arkreactor/VM/Value/Closure.cpp 23 style Consider using std::any_of algorithm instead of a raw loop.
src/arkscript/Formatter.cpp 170 style Local variable 'output' shadows outer function
src/arkscript/Formatter.cpp 228 style Local variable 'output' shadows outer function
src/arkscript/Formatter.cpp 396 style Local variable 'output' shadows outer function
src/arkscript/Formatter.cpp 495 style Local variable 'output' shadows outer function
src/arkscript/Formatter.cpp 515 style Local variable 'output' shadows outer function
src/arkscript/JsonCompiler.cpp 184 style Consider using std::transform algorithm instead of a raw loop.
src/arkscript/REPL/Repl.cpp 21 performance Variable 'm_keywords' is assigned in constructor body. Consider performing initialization in initialization list.
src/arkscript/REPL/Utils.cpp 33 style Consider using std::copy algorithm instead of a raw loop.
src/arkscript/REPL/Utils.cpp 35 style Consider using std::copy algorithm instead of a raw loop.
src/arkscript/REPL/Utils.cpp 37 style Consider using std::copy algorithm instead of a raw loop.
src/arkscript/REPL/Utils.cpp 39 style Consider using std::copy algorithm instead of a raw loop.
src/arkscript/REPL/Utils.cpp 53 style Consider using std::transform algorithm instead of a raw loop.
src/arkscript/REPL/Utils.cpp 55 style Consider using std::transform algorithm instead of a raw loop.
src/arkscript/REPL/Utils.cpp 64 style Consider using std::transform algorithm instead of a raw loop.

…es, easier to maintain with less code repetition
@SuperFola SuperFola force-pushed the feat/better-locals branch from 0c17986 to 78bb993 Compare March 21, 2025 11:14
@coveralls
Copy link

coveralls commented Mar 21, 2025

Coverage Status

coverage: 79.378% (+0.5%) from 78.852%
when pulling 8dcea74 on feat/better-locals
into 4aa4303 on dev.

@github-actions
Copy link

github-actions bot commented Mar 21, 2025

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 : 40 thousands
 Cumulative speed : 134 execs/sec
    Pending items : 142 faves, 933 total
 Coverage reached : 11.45%
    Crashes saved : 0
      Hangs saved : 0

Cycles without finds : 0
Time without finds : 0

[+] Captured 39199 tuples (map size 198028, highest value 255, total values 290375151) in '/dev/null'.
[+] A coverage of 39199 edges were achieved out of 198080 existing (19.79%) with 943 input files.

do {} while value != InstPtr is not needed anymore as we have solved the stack
trashing problem about two years ago, we only have useful values on the stack.
@SuperFola SuperFola force-pushed the feat/better-locals branch from bb26978 to 5040dd1 Compare March 21, 2025 17:12
@SuperFola SuperFola force-pushed the feat/better-locals branch from 5040dd1 to 4a808a5 Compare March 21, 2025 17:31
@SuperFola SuperFola force-pushed the feat/better-locals branch from 4a808a5 to 230e714 Compare March 21, 2025 17:33
@SuperFola SuperFola force-pushed the feat/better-locals branch from 1b9ded9 to 8dcea74 Compare March 22, 2025 21:21
@SuperFola SuperFola merged commit eedb347 into dev Mar 22, 2025
25 checks passed
@SuperFola SuperFola deleted the feat/better-locals branch March 22, 2025 21:33
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.

Add a proxy to include windows.h to avoid having it polluting everything

3 participants