Skip to content

feat(builtins): add two new builtins to manipulate dates#692

Merged
SuperFola merged 3 commits into
devfrom
feat/datetime-builtins
Jun 9, 2026
Merged

feat(builtins): add two new builtins to manipulate dates#692
SuperFola merged 3 commits into
devfrom
feat/datetime-builtins

Conversation

@SuperFola

@SuperFola SuperFola commented May 27, 2026

Copy link
Copy Markdown
Member

Description

Add two new builtins to play with date and integrate a new std.Datetime library

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
  • I confirm that I am the author of this code and release it to the ArkScript project under the MPL-2.0 license. This contribution does not contain code from other sources, including code generated by a Large Language Model ("AI").

@github-actions

github-actions Bot commented May 27, 2026

Copy link
Copy Markdown

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/Builtins/Time.cpp 66:88 Ark::internal::Builtins::Time::makeTimestamp 6 22 5
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 450:2153 Ark::VM::unsafeRun 2 1432 281
src/arkreactor/Compiler/Macros/Processor.cpp 259:643 Ark::internal::MacroProcessor::evaluate 3 353 119
src/arkreactor/Compiler/BytecodeReader.cpp 385:596 Ark::BytecodeReader::display 4 171 92
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/Lowerer/ASTLowerer.cpp 355:434 Ark::internal::ASTLowerer::compileListInstruction 3 64 32
src/arkreactor/Compiler/AST/Node.cpp 179:285 Ark::internal::Node::repr 0 90 30
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 853:999 Ark::internal::ASTLowerer::handleFunctionCall 3 114 30
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 212:317 Ark::internal::ASTLowerer::compileExpression 5 88 29
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/Compiler/BytecodeReader.cpp 612:713 Ark::BytecodeReader::printInstruction 7 98 25
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 81:149 Ark::Value::toString 2 54 21
src/arkreactor/VM/VM.cpp 2307:2401 Ark::VM::backtrace 3 81 20
src/arkreactor/Compiler/AST/Optimizer.cpp 35:85 Ark::internal::Optimizer::countAndPruneDeadCode 1 42 20
src/arkreactor/Compiler/NameResolution/StaticScope.cpp 70:111 Ark::internal::NamespaceScope::get 3 32 19
src/arkscript/Formatter.cpp 501:560 Formatter::formatCall 2 51 19
src/arkreactor/Builtins/String.cpp 47:113 fmt::formatter::parse 1 59 18
src/arkreactor/Compiler/AST/Optimizer.cpp 87:144 Ark::internal::Optimizer::pruneUnusedGlobalVariables 1 50 18
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 799:851 Ark::internal::ASTLowerer::handleOperator 3 42 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
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 107:129 Ark::internal::ASTLowerer::nodeProducesOutput 1 18 17
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 597:645 Ark::internal::ASTLowerer::compileLetMutSet 4 40 17
include/Ark/Compiler/AST/Predicates.hpp 132:156 Ark::internal::IsSymbol::operator ( ) 1 24 16
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 514:595 Ark::internal::ASTLowerer::compileFunction 3 59 16
src/arkscript/Formatter.cpp 298:339 Formatter::formatFunction 2 35 16
src/arkreactor/VM/VM.cpp 2165:2222 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/Builtins/Time.cpp 31 style Parameter 'n' can be declared as reference to const
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 20 performance Variable 'm_arg_kinds' is assigned in constructor body. Consider performing initialization in initialization list.
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/Lowerer/ASTLowerer.cpp 620 style Consider using std::count_if algorithm instead of a raw loop.
src/arkreactor/Compiler/Lowerer/LocalsLocator.cpp 26 style The scope of the variable 'data' can be reduced.
src/arkreactor/Compiler/NameResolution/ScopeResolver.cpp 136 style Consider using std::find_if algorithm instead of a raw loop.
src/arkreactor/State.cpp 184 style Variable 'bytecode_hash' is assigned a value that is never used.
src/arkreactor/VM/SharedLibrary.cpp 0 information Too many #ifdef configurations - cppcheck only checks 12 of 13 configurations. Use --force to check all configurations.
src/arkreactor/VM/VM.cpp 0 information Too many #ifdef configurations - cppcheck only checks 12 of 13 configurations. Use --force to check all configurations.
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

github-actions Bot commented May 27, 2026

Copy link
Copy Markdown

Super Instructions report

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

Super Instruction Uses in compiled code
APPEND_IN_PLACE_SYM_INDEX 22
DECREMENT 18
INCREMENT 17
STORE_FROM 15
INCREMENT_BY_INDEX 15
LT_CONST_JUMP_IF_FALSE 9
NEQ_SYM_JUMP_IF_FALSE 4
SET_VAL_TAIL 4
STORE_HEAD 2
MUL_BY 2
GT_SYM_JUMP_IF_FALSE 2
CHECK_TYPE_OF 2
NEQ_CONST_JUMP_IF_TRUE 2
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 6142
LOAD_CONST_LOAD_CONST 4779
LOAD_CONST_STORE 2964
LOAD_CONST_SET_VAL 903
CALL_BUILTIN 863
CALL_BUILTIN_WITHOUT_RETURN_ADDRESS 636
INCREMENT_STORE 588
AT_SYM_SYM 541
GET_FIELD_FROM_SYMBOL_INDEX 488
STORE_LIST 371
GET_FIELD_FROM_SYMBOL 336
APPEND_IN_PLACE_SYM 329
CALL_SYMBOL_BY_INDEX 306
LT_LEN_SYM_JUMP_IF_FALSE 306
EQ_SYM_INDEX_JUMP_IF_TRUE 214
SET_VAL_FROM_INDEX 154
SET_VAL_FROM 140
LT_SYM_JUMP_IF_FALSE 128
STORE_FROM_INDEX 123
STORE_LEN 114
GT_CONST_JUMP_IF_FALSE 109
FUSED_MATH 108
DECREMENT_BY_INDEX 89
AT_SYM_INDEX_SYM_INDEX 83
GT_CONST_JUMP_IF_TRUE 82
DECREMENT_STORE 81
LT_CONST_JUMP_IF_TRUE 80
MUL_BY_INDEX 78
CALL_CURRENT_PAGE 73
EQ_CONST_JUMP_IF_TRUE 50
AT_SYM_INDEX_CONST 45
STORE_HEAD_BY_INDEX 35
STORE_TAIL_BY_INDEX 34
CHECK_TYPE_OF_BY_INDEX 27

@coveralls

coveralls commented May 27, 2026

Copy link
Copy Markdown

Coverage Report for CI Build 27200108521

Coverage increased (+0.03%) to 94.343%

Details

  • Coverage increased (+0.03%) from the base build.
  • Patch coverage: 1 uncovered change across 1 file (87 of 88 lines covered, 98.86%).
  • No coverage regressions found.

Uncovered Changes

File Changed Covered %
src/arkreactor/Builtins/Time.cpp 67 66 98.51%
Total (2 files) 88 87 98.86%

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 10853
Covered Lines: 10239
Line Coverage: 94.34%
Coverage Strength: 925991.29 hits per line

💛 - Coveralls

@github-actions

github-actions Bot commented May 27, 2026

Copy link
Copy Markdown

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 : 35 thousands
 Cumulative speed : 117 execs/sec
    Pending items : 133 faves, 1227 total
 Coverage reached : 10.02%
    Crashes saved : 0
      Hangs saved : 0

Cycles without finds : 0
Time without finds : 0

[+] Captured 44239 tuples (map size 269386, highest value 255, total values 469863071) in '/dev/null'.
[+] A coverage of 44239 edges were achieved out of 269440 existing (16.42%) with 1235 input files.

@SuperFola SuperFola force-pushed the feat/datetime-builtins branch 2 times, most recently from 3f13406 to de16016 Compare May 28, 2026 18:55
@SuperFola SuperFola force-pushed the feat/datetime-builtins branch from de16016 to 12d79cb Compare June 4, 2026 17:11
@SuperFola SuperFola force-pushed the feat/datetime-builtins branch from 12d79cb to 5e3e1f8 Compare June 6, 2026 17:17
@SuperFola SuperFola force-pushed the feat/datetime-builtins branch 12 times, most recently from 12ebad0 to ac5f35f Compare June 9, 2026 07:42
@SuperFola SuperFola force-pushed the feat/datetime-builtins branch from ac5f35f to 3a42b1d Compare June 9, 2026 10:29
@SuperFola SuperFola marked this pull request as ready for review June 9, 2026 10:30
@SuperFola SuperFola merged commit 2c77ac5 into dev Jun 9, 2026
36 checks passed
@SuperFola SuperFola deleted the feat/datetime-builtins branch June 9, 2026 10:44
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