• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ArkScript-lang / Ark / 15545227815

09 Jun 2025 09:40PM UTC coverage: 86.622% (-0.1%) from 86.738%
15545227815

Pull #549

github

web-flow
Merge 0cd5e8dbd into aa74c8fcd
Pull Request #549: refactor: move Value::ProcType to std::function

23 of 39 new or added lines in 6 files covered. (58.97%)

11 existing lines in 2 files now uncovered.

7278 of 8402 relevant lines covered (86.62%)

120030.95 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

90.79
/src/arkreactor/VM/Value.cpp
1
#include <Ark/VM/Value.hpp>
2
#include <Ark/VM/Value/Procedure.hpp>
3

4
#include <fmt/format.h>
5
#include <fmt/ostream.h>
6

7
namespace Ark
8
{
9
    Value::Value() noexcept :
2,163,407✔
10
        m_type(ValueType::Undefined)
2,163,407✔
11
    {}
4,326,814✔
12

13
    Value::Value(ValueType type) noexcept :
1,853✔
14
        m_type(type)
1,853✔
15
    {
1,853✔
16
        if (type == ValueType::List)
1,853✔
17
            m_value = std::vector<Value>();
1,783✔
18
        else if (type == ValueType::String)
70✔
19
            m_value = "";
51✔
20
    }
1,853✔
21

22
    Value::Value(const int value) noexcept :
19,695✔
23
        m_type(ValueType::Number), m_value(static_cast<double>(value))
19,695✔
24
    {}
39,390✔
25

26
    Value::Value(double value) noexcept :
355,962✔
27
        m_type(ValueType::Number), m_value(value)
355,962✔
28
    {}
711,924✔
29

30
    Value::Value(const std::string& value) noexcept :
19,670✔
31
        m_type(ValueType::String), m_value(value)
19,670✔
32
    {}
39,340✔
33

34
    Value::Value(internal::PageAddr_t value) noexcept :
142,931✔
35
        m_type(ValueType::PageAddr), m_value(value)
142,931✔
36
    {}
285,862✔
37

38
    Value::Value(Procedure&& value) noexcept :
55✔
39
        m_type(ValueType::CProc), m_value(std::move(value))
55✔
40
    {}
110✔
41

42
    Value::Value(std::vector<Value>&& value) noexcept :
62✔
43
        m_type(ValueType::List), m_value(std::move(value))
62✔
44
    {}
62✔
45

46
    Value::Value(internal::Closure&& value) noexcept :
1,974✔
47
        m_type(ValueType::Closure), m_value(std::move(value))
1,974✔
48
    {}
1,974✔
49

50
    Value::Value(UserType&& value) noexcept :
7✔
51
        m_type(ValueType::User), m_value(value)
7✔
52
    {}
7✔
53

54
    Value::Value(Value* ref) noexcept :
28,766✔
55
        m_type(ValueType::Reference), m_value(ref)
28,766✔
56
    {}
57,532✔
57

58
    void Value::push_back(const Value& value)
4,344✔
59
    {
4,344✔
60
        list().emplace_back(value);
4,344✔
61
    }
4,344✔
62

UNCOV
63
    void Value::push_back(Value&& value)
×
UNCOV
64
    {
×
UNCOV
65
        list().emplace_back(std::move(value));
×
UNCOV
66
    }
×
67

68
    std::string Value::toString(VM& vm) const noexcept
621✔
69
    {
621✔
70
        switch (valueType())
621✔
71
        {
240✔
72
            case ValueType::Number:
73
                return fmt::format("{}", number());
595✔
74

75
            case ValueType::String:
76
                return string();
356✔
77

78
            case ValueType::PageAddr:
79
                return fmt::format("Function@{}", pageAddr());
2✔
80

81
            case ValueType::CProc:
82
                return "CProcedure";
11✔
83

84
            case ValueType::List:
85
            {
86
                std::string out = "[";
10✔
87
                for (auto it = constList().begin(), it_end = constList().end(); it != it_end; ++it)
37✔
88
                {
89
                    if (it->valueType() == ValueType::String)
27✔
90
                        out += "\"" + it->toString(vm) + "\"";
4✔
91
                    else
92
                        out += it->toString(vm);
23✔
93
                    if (it + 1 != it_end)
27✔
94
                        out += " ";
17✔
95
                }
27✔
96
                return out + "]";
10✔
97
            }
11✔
98

99
            case ValueType::Closure:
100
                return closure().toString(vm);
1✔
101

102
            case ValueType::User:
103
                return fmt::format("{}", fmt::streamed(usertype()));
4✔
104

105
            case ValueType::Nil:
106
                return "nil";
6✔
107

108
            case ValueType::True:
109
                return "true";
3✔
110

111
            case ValueType::False:
112
                return "false";
1✔
113

114
            case ValueType::Undefined:
115
                return "undefined";
6✔
116

117
            case ValueType::Reference:
118
                if (reference() != this)
6✔
119
                    return reference()->toString(vm);
6✔
UNCOV
120
                return "Ref(self)";
×
121

122
            case ValueType::InstPtr:
UNCOV
123
                return fmt::format("Instruction@{}", pageAddr());
×
124

125
            default:
UNCOV
126
                return "~\\._./~";
×
127
        }
128
    }
621✔
129
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc