@ugo-studio/jspp 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analysis/scope.js +17 -0
- package/dist/analysis/typeAnalyzer.js +7 -1
- package/dist/ast/symbols.js +32 -0
- package/dist/ast/types.js +0 -6
- package/dist/cli-utils/args.js +57 -0
- package/dist/cli-utils/colors.js +9 -0
- package/dist/cli-utils/file-utils.js +20 -0
- package/dist/cli-utils/spinner.js +55 -0
- package/dist/cli.js +105 -30
- package/dist/core/codegen/class-handlers.js +10 -6
- package/dist/core/codegen/control-flow-handlers.js +57 -28
- package/dist/core/codegen/declaration-handlers.js +10 -6
- package/dist/core/codegen/expression-handlers.js +206 -61
- package/dist/core/codegen/function-handlers.js +203 -76
- package/dist/core/codegen/helpers.js +125 -28
- package/dist/core/codegen/index.js +23 -15
- package/dist/core/codegen/literal-handlers.js +15 -6
- package/dist/core/codegen/statement-handlers.js +282 -84
- package/dist/core/codegen/visitor.js +3 -1
- package/package.json +1 -1
- package/src/prelude/any_value.hpp +221 -342
- package/src/prelude/any_value_access.hpp +168 -81
- package/src/prelude/any_value_defines.hpp +74 -35
- package/src/prelude/any_value_helpers.hpp +75 -180
- package/src/prelude/exception.hpp +1 -0
- package/src/prelude/exception_helpers.hpp +4 -4
- package/src/prelude/index.hpp +12 -2
- package/src/prelude/library/array.hpp +190 -0
- package/src/prelude/library/console.hpp +6 -5
- package/src/prelude/library/error.hpp +10 -8
- package/src/prelude/library/function.hpp +10 -0
- package/src/prelude/library/global.hpp +20 -0
- package/src/prelude/library/math.hpp +308 -0
- package/src/prelude/library/object.hpp +288 -0
- package/src/prelude/library/performance.hpp +1 -1
- package/src/prelude/library/process.hpp +39 -0
- package/src/prelude/library/promise.hpp +57 -55
- package/src/prelude/library/symbol.hpp +45 -57
- package/src/prelude/library/timer.hpp +6 -6
- package/src/prelude/types.hpp +54 -0
- package/src/prelude/utils/access.hpp +215 -11
- package/src/prelude/utils/assignment_operators.hpp +99 -0
- package/src/prelude/utils/log_any_value/array.hpp +8 -8
- package/src/prelude/utils/log_any_value/function.hpp +6 -4
- package/src/prelude/utils/log_any_value/object.hpp +41 -24
- package/src/prelude/utils/log_any_value/primitives.hpp +3 -1
- package/src/prelude/utils/operators.hpp +750 -274
- package/src/prelude/utils/well_known_symbols.hpp +12 -0
- package/src/prelude/values/array.hpp +8 -6
- package/src/prelude/values/async_iterator.hpp +79 -0
- package/src/prelude/values/descriptors.hpp +2 -2
- package/src/prelude/values/function.hpp +72 -62
- package/src/prelude/values/helpers/array.hpp +64 -28
- package/src/prelude/values/helpers/async_iterator.hpp +275 -0
- package/src/prelude/values/helpers/function.hpp +81 -92
- package/src/prelude/values/helpers/iterator.hpp +3 -3
- package/src/prelude/values/helpers/object.hpp +54 -9
- package/src/prelude/values/helpers/promise.hpp +13 -6
- package/src/prelude/values/iterator.hpp +1 -1
- package/src/prelude/values/object.hpp +10 -3
- package/src/prelude/values/promise.hpp +7 -11
- package/src/prelude/values/prototypes/array.hpp +851 -12
- package/src/prelude/values/prototypes/async_iterator.hpp +50 -0
- package/src/prelude/values/prototypes/function.hpp +2 -2
- package/src/prelude/values/prototypes/iterator.hpp +5 -5
- package/src/prelude/values/prototypes/number.hpp +153 -0
- package/src/prelude/values/prototypes/object.hpp +2 -2
- package/src/prelude/values/prototypes/promise.hpp +40 -30
- package/src/prelude/values/prototypes/string.hpp +28 -28
- package/src/prelude/values/prototypes/symbol.hpp +20 -3
- package/src/prelude/values/shape.hpp +52 -0
|
@@ -17,18 +17,21 @@ namespace jspp
|
|
|
17
17
|
{
|
|
18
18
|
auto obj = val.as_object();
|
|
19
19
|
|
|
20
|
-
size_t prop_count = obj->
|
|
20
|
+
size_t prop_count = obj->storage.size();
|
|
21
21
|
bool use_horizontal_layout = prop_count > 0 && prop_count <= HORIZONTAL_OBJECT_MAX_PROPS;
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
for (size_t i = 0; i < obj->storage.size(); ++i)
|
|
24
24
|
{
|
|
25
|
-
|
|
25
|
+
const auto& prop_val = obj->storage[i];
|
|
26
|
+
if (!is_enumerable_property(prop_val))
|
|
26
27
|
{
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
prop_count--;
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (use_horizontal_layout && !is_simple_value(prop_val))
|
|
32
|
+
{
|
|
33
|
+
use_horizontal_layout = false;
|
|
34
|
+
break;
|
|
32
35
|
}
|
|
33
36
|
}
|
|
34
37
|
|
|
@@ -39,13 +42,19 @@ namespace jspp
|
|
|
39
42
|
// Special handling for Error objects
|
|
40
43
|
try
|
|
41
44
|
{
|
|
42
|
-
|
|
45
|
+
const AnyValue args[] = {val};
|
|
46
|
+
auto is_error = is_truthy(isErrorFn.call(isErrorFn, std::span<const AnyValue>(args, 1)));
|
|
43
47
|
if (is_error)
|
|
44
48
|
{
|
|
45
|
-
auto result = errorToStringFn.
|
|
49
|
+
auto result = errorToStringFn.call(val, std::span<const AnyValue>{});
|
|
46
50
|
if (result.is_string())
|
|
47
51
|
{
|
|
48
|
-
ss << result.to_std_string()
|
|
52
|
+
ss << result.to_std_string();
|
|
53
|
+
if (prop_count == 0)
|
|
54
|
+
{
|
|
55
|
+
return ss.str();
|
|
56
|
+
}
|
|
57
|
+
ss << " ";
|
|
49
58
|
}
|
|
50
59
|
}
|
|
51
60
|
}
|
|
@@ -58,20 +67,23 @@ namespace jspp
|
|
|
58
67
|
{
|
|
59
68
|
ss << "{ ";
|
|
60
69
|
size_t current_prop = 0;
|
|
61
|
-
for (
|
|
70
|
+
for (size_t i = 0; i < obj->shape->property_names.size(); ++i)
|
|
62
71
|
{
|
|
63
|
-
|
|
72
|
+
const auto& key = obj->shape->property_names[i];
|
|
73
|
+
const auto& prop_val = obj->storage[i];
|
|
74
|
+
|
|
75
|
+
if (!is_enumerable_property(prop_val))
|
|
64
76
|
continue;
|
|
65
77
|
|
|
66
|
-
if (is_valid_js_identifier(
|
|
78
|
+
if (is_valid_js_identifier(key))
|
|
67
79
|
{
|
|
68
|
-
ss <<
|
|
80
|
+
ss << key;
|
|
69
81
|
}
|
|
70
82
|
else
|
|
71
83
|
{
|
|
72
|
-
ss << "\"" <<
|
|
84
|
+
ss << "\"" << key << "\"";
|
|
73
85
|
}
|
|
74
|
-
ss << ": " << to_log_string(
|
|
86
|
+
ss << ": " << to_log_string(prop_val, visited, depth + 1);
|
|
75
87
|
if (++current_prop < prop_count)
|
|
76
88
|
ss << Color::BRIGHT_BLACK << ", " << Color::RESET;
|
|
77
89
|
}
|
|
@@ -84,25 +96,30 @@ namespace jspp
|
|
|
84
96
|
{
|
|
85
97
|
ss << "\n";
|
|
86
98
|
size_t props_shown = 0;
|
|
87
|
-
for (
|
|
99
|
+
for (size_t i = 0; i < obj->shape->property_names.size(); ++i)
|
|
88
100
|
{
|
|
101
|
+
const auto& key = obj->shape->property_names[i];
|
|
102
|
+
const auto& prop_val = obj->storage[i];
|
|
103
|
+
|
|
89
104
|
if (props_shown >= MAX_OBJECT_PROPS)
|
|
90
105
|
break;
|
|
106
|
+
|
|
107
|
+
if (!is_enumerable_property(prop_val))
|
|
108
|
+
continue;
|
|
109
|
+
|
|
91
110
|
if (props_shown > 0)
|
|
92
111
|
ss << ",\n";
|
|
93
|
-
if (!is_enumerable_property(pair.second))
|
|
94
|
-
continue;
|
|
95
112
|
|
|
96
113
|
ss << next_indent;
|
|
97
|
-
if (is_valid_js_identifier(
|
|
114
|
+
if (is_valid_js_identifier(key))
|
|
98
115
|
{
|
|
99
|
-
ss <<
|
|
116
|
+
ss << key;
|
|
100
117
|
}
|
|
101
118
|
else
|
|
102
119
|
{
|
|
103
|
-
ss << "\"" <<
|
|
120
|
+
ss << "\"" << key << "\"";
|
|
104
121
|
}
|
|
105
|
-
ss << ": " << to_log_string(
|
|
122
|
+
ss << ": " << to_log_string(prop_val, visited, depth + 1);
|
|
106
123
|
props_shown++;
|
|
107
124
|
}
|
|
108
125
|
if (prop_count > MAX_OBJECT_PROPS)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#pragma once
|
|
2
|
+
|
|
2
3
|
#include "types.hpp"
|
|
3
4
|
#include "any_value.hpp"
|
|
4
5
|
#include "utils/log_any_value/config.hpp"
|
|
@@ -13,7 +14,8 @@ namespace jspp
|
|
|
13
14
|
inline std::optional<std::string> format_primitive(const AnyValue &val, int depth)
|
|
14
15
|
{
|
|
15
16
|
if (val.is_uninitialized())
|
|
16
|
-
|
|
17
|
+
// THROW
|
|
18
|
+
Exception::throw_uninitialized_reference("#<Object>");
|
|
17
19
|
if (val.is_undefined())
|
|
18
20
|
return Color::BRIGHT_BLACK + std::string("undefined") + Color::RESET;
|
|
19
21
|
if (val.is_null())
|