@ugo-studio/jspp 0.2.9 → 0.3.0

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.
Files changed (35) hide show
  1. package/dist/core/codegen/class-handlers.js +6 -6
  2. package/dist/core/codegen/statement-handlers.js +1 -1
  3. package/package.json +1 -1
  4. package/src/prelude/any_value.hpp +362 -362
  5. package/src/prelude/any_value_access.hpp +170 -170
  6. package/src/prelude/any_value_defines.hpp +189 -189
  7. package/src/prelude/any_value_helpers.hpp +374 -374
  8. package/src/prelude/library/array.hpp +185 -185
  9. package/src/prelude/library/console.hpp +111 -111
  10. package/src/prelude/library/error.hpp +112 -112
  11. package/src/prelude/library/function.hpp +10 -10
  12. package/src/prelude/library/math.hpp +307 -307
  13. package/src/prelude/library/object.hpp +275 -275
  14. package/src/prelude/library/process.hpp +39 -39
  15. package/src/prelude/library/promise.hpp +123 -123
  16. package/src/prelude/library/symbol.hpp +52 -52
  17. package/src/prelude/library/timer.hpp +91 -91
  18. package/src/prelude/types.hpp +178 -178
  19. package/src/prelude/utils/access.hpp +411 -411
  20. package/src/prelude/utils/operators.hpp +336 -336
  21. package/src/prelude/values/array.hpp +0 -1
  22. package/src/prelude/values/async_iterator.hpp +83 -83
  23. package/src/prelude/values/function.hpp +82 -82
  24. package/src/prelude/values/helpers/array.hpp +198 -208
  25. package/src/prelude/values/helpers/async_iterator.hpp +275 -275
  26. package/src/prelude/values/helpers/function.hpp +108 -108
  27. package/src/prelude/values/helpers/iterator.hpp +144 -144
  28. package/src/prelude/values/helpers/promise.hpp +253 -253
  29. package/src/prelude/values/helpers/string.hpp +37 -61
  30. package/src/prelude/values/promise.hpp +72 -72
  31. package/src/prelude/values/prototypes/array.hpp +14 -2
  32. package/src/prelude/values/prototypes/iterator.hpp +201 -201
  33. package/src/prelude/values/prototypes/promise.hpp +196 -196
  34. package/src/prelude/values/prototypes/string.hpp +564 -542
  35. package/src/prelude/values/string.hpp +25 -26
@@ -1,179 +1,179 @@
1
- #pragma once
2
-
3
- #include <iostream>
4
- #include <string>
5
- #include <vector>
6
- #include <variant>
7
- #include <functional>
8
- #include <memory>
9
- #include <map>
10
- #include <unordered_map>
11
- #include <algorithm>
12
- #include <cctype>
13
- #include <cstring>
14
- #include <set>
15
- #include <cmath>
16
- #include <optional>
17
- #include <span>
18
-
19
- // JSPP standard library
20
- namespace jspp
21
- {
22
- enum class JsType : uint8_t
23
- {
24
- Undefined = 0,
25
- Null = 1,
26
- Uninitialized = 2,
27
- Boolean = 3,
28
- Number = 4,
29
- String = 5,
30
- Object = 6,
31
- Array = 7,
32
- Function = 8,
33
- Iterator = 9,
34
- Symbol = 10,
35
- Promise = 11,
36
- DataDescriptor = 12,
37
- AccessorDescriptor = 13,
38
- AsyncIterator = 14,
39
- };
40
-
41
- struct HeapObject {
42
- mutable uint32_t ref_count = 0;
43
-
44
- HeapObject() noexcept : ref_count(0) {}
45
-
46
- // Disable copying/assignment of ref_count
47
- HeapObject(const HeapObject&) noexcept : ref_count(0) {}
48
- HeapObject& operator=(const HeapObject&) noexcept { return *this; }
49
-
50
- virtual ~HeapObject() = default;
51
- virtual JsType get_heap_type() const = 0;
52
-
53
- void ref() const {
54
- ++ref_count;
55
- }
56
-
57
- void deref() const {
58
- if (--ref_count == 0) {
59
- delete this;
60
- }
61
- }
62
- };
63
-
64
- // Js value forward declarations
65
- struct JsUndefined; // cannot set property
66
- struct JsNull; // cannot set property
67
- struct JsUninitialized; // cannot set property
68
- struct JsString; // can set property
69
- struct JsObject; // can set property
70
- struct JsArray; // can set property
71
- struct JsFunction; // can set property
72
- struct JsPromise; // can set property
73
- struct JsSymbol; // can set property (but usually doesn't have own props)
74
-
75
- template <typename T>
76
- class JsIterator; // can set property
77
-
78
- template <typename T>
79
- class JsAsyncIterator; // can set property
80
-
81
- // Object property configuration forward declarations
82
- struct DataDescriptor;
83
- struct AccessorDescriptor;
84
-
85
- // Custom runtime exception
86
- struct Exception;
87
-
88
- // Dynamic AnyValue
89
- class AnyValue;
90
-
91
- using JsFunctionCallable = std::variant<
92
- std::function<AnyValue(AnyValue, std::span<const AnyValue>)>,
93
- std::function<JsIterator<AnyValue>(AnyValue, std::vector<AnyValue>)>,
94
- std::function<JsPromise(AnyValue, std::vector<AnyValue>)>,
95
- std::function<JsAsyncIterator<AnyValue>(AnyValue, std::vector<AnyValue>)>>;
96
-
97
- // Awaiter for AnyValue
98
- struct AnyValueAwaiter;
99
-
100
- // Truthiness checker
101
- const bool is_truthy(const double &val) noexcept;
102
- const bool is_truthy(const std::string &val) noexcept;
103
- const bool is_truthy(const AnyValue &val) noexcept;
104
-
105
- // Basic equality operators
106
- inline const bool is_strictly_equal_to_primitive(const AnyValue &lhs, const double &rhs) noexcept;
107
- inline const bool is_strictly_equal_to_primitive(const double &lhs, const AnyValue &rhs) noexcept;
108
- inline const bool is_strictly_equal_to_primitive(const double &lhs, const double &rhs) noexcept;
109
- inline const bool is_strictly_equal_to_primitive(const AnyValue &lhs, const AnyValue &rhs) noexcept;
110
-
111
- inline const bool is_equal_to_primitive(const AnyValue &lhs, const double &rhs) noexcept;
112
- inline const bool is_equal_to_primitive(const double &lhs, const AnyValue &rhs) noexcept;
113
- inline const bool is_equal_to_primitive(const double &lhs, const double &rhs) noexcept;
114
- inline const bool is_equal_to_primitive(const AnyValue &lhs, const AnyValue &rhs) noexcept;
115
-
116
- inline const AnyValue is_strictly_equal_to(const AnyValue &lhs, const double &rhs) noexcept;
117
- inline const AnyValue is_strictly_equal_to(const double &lhs, const AnyValue &rhs) noexcept;
118
- inline const AnyValue is_strictly_equal_to(const double &lhs, const double &rhs) noexcept;
119
- inline const AnyValue is_strictly_equal_to(const AnyValue &lhs, const AnyValue &rhs) noexcept;
120
-
121
- inline const AnyValue is_equal_to(const AnyValue &lhs, const double &rhs) noexcept;
122
- inline const AnyValue is_equal_to(const double &lhs, const AnyValue &rhs) noexcept;
123
- inline const AnyValue is_equal_to(const double &lhs, const double &rhs) noexcept;
124
- inline const AnyValue is_equal_to(const AnyValue &lhs, const AnyValue &rhs) noexcept;
125
-
126
- inline const AnyValue not_strictly_equal_to(const AnyValue &lhs, const double &rhs) noexcept;
127
- inline const AnyValue not_strictly_equal_to(const double &lhs, const AnyValue &rhs) noexcept;
128
- inline const AnyValue not_strictly_equal_to(const double &lhs, const double &rhs) noexcept;
129
- inline const AnyValue not_strictly_equal_to(const AnyValue &lhs, const AnyValue &rhs) noexcept;
130
-
131
- inline const AnyValue not_equal_to(const AnyValue &lhs, const double &rhs) noexcept;
132
- inline const AnyValue not_equal_to(const double &lhs, const AnyValue &rhs) noexcept;
133
- inline const AnyValue not_equal_to(const AnyValue &lhs, const AnyValue &rhs) noexcept;
134
-
135
- // Bitwise operators
136
- inline AnyValue unsigned_right_shift(const AnyValue &lhs, const AnyValue &rhs);
137
- inline AnyValue unsigned_right_shift(const AnyValue &lhs, const double &rhs);
138
- inline AnyValue unsigned_right_shift(const double &lhs, const AnyValue &rhs);
139
-
140
- // Arithemetic operators
141
-
142
- inline AnyValue pow(const double &lhs, const double &rhs);
143
- inline AnyValue pow(const AnyValue &lhs, const double &rhs);
144
- inline AnyValue pow(const AnyValue &lhs, const AnyValue &rhs);
145
-
146
- // AnyValue prototypes
147
- namespace ObjectPrototypes
148
- {
149
- inline std::optional<AnyValue> get(const std::string &key);
150
- }
151
- namespace StringPrototypes
152
- {
153
- inline std::optional<AnyValue> get(const std::string &key);
154
- }
155
- namespace NumberPrototypes
156
- {
157
- inline std::optional<AnyValue> get(const std::string &key);
158
- }
159
- namespace ArrayPrototypes
160
- {
161
- inline std::optional<AnyValue> get(const std::string &key);
162
- }
163
- namespace FunctionPrototypes
164
- {
165
- inline std::optional<AnyValue> get(const std::string &key);
166
- }
167
- namespace PromisePrototypes
168
- {
169
- inline std::optional<AnyValue> get(const std::string &key);
170
- }
171
- namespace IteratorPrototypes
172
- {
173
- inline std::optional<AnyValue> get(const std::string &key);
174
- }
175
- namespace SymbolPrototypes
176
- {
177
- inline std::optional<AnyValue> get(const std::string &key);
178
- }
1
+ #pragma once
2
+
3
+ #include <iostream>
4
+ #include <string>
5
+ #include <vector>
6
+ #include <variant>
7
+ #include <functional>
8
+ #include <memory>
9
+ #include <map>
10
+ #include <unordered_map>
11
+ #include <algorithm>
12
+ #include <cctype>
13
+ #include <cstring>
14
+ #include <set>
15
+ #include <cmath>
16
+ #include <optional>
17
+ #include <span>
18
+
19
+ // JSPP standard library
20
+ namespace jspp
21
+ {
22
+ enum class JsType : uint8_t
23
+ {
24
+ Undefined = 0,
25
+ Null = 1,
26
+ Uninitialized = 2,
27
+ Boolean = 3,
28
+ Number = 4,
29
+ String = 5,
30
+ Object = 6,
31
+ Array = 7,
32
+ Function = 8,
33
+ Iterator = 9,
34
+ Symbol = 10,
35
+ Promise = 11,
36
+ DataDescriptor = 12,
37
+ AccessorDescriptor = 13,
38
+ AsyncIterator = 14,
39
+ };
40
+
41
+ struct HeapObject {
42
+ mutable uint32_t ref_count = 0;
43
+
44
+ HeapObject() noexcept : ref_count(0) {}
45
+
46
+ // Disable copying/assignment of ref_count
47
+ HeapObject(const HeapObject&) noexcept : ref_count(0) {}
48
+ HeapObject& operator=(const HeapObject&) noexcept { return *this; }
49
+
50
+ virtual ~HeapObject() = default;
51
+ virtual JsType get_heap_type() const = 0;
52
+
53
+ void ref() const {
54
+ ++ref_count;
55
+ }
56
+
57
+ void deref() const {
58
+ if (--ref_count == 0) {
59
+ delete this;
60
+ }
61
+ }
62
+ };
63
+
64
+ // Js value forward declarations
65
+ struct JsUndefined; // cannot set property
66
+ struct JsNull; // cannot set property
67
+ struct JsUninitialized; // cannot set property
68
+ struct JsString; // can set property
69
+ struct JsObject; // can set property
70
+ struct JsArray; // can set property
71
+ struct JsFunction; // can set property
72
+ struct JsPromise; // can set property
73
+ struct JsSymbol; // can set property (but usually doesn't have own props)
74
+
75
+ template <typename T>
76
+ class JsIterator; // can set property
77
+
78
+ template <typename T>
79
+ class JsAsyncIterator; // can set property
80
+
81
+ // Object property configuration forward declarations
82
+ struct DataDescriptor;
83
+ struct AccessorDescriptor;
84
+
85
+ // Custom runtime exception
86
+ struct Exception;
87
+
88
+ // Dynamic AnyValue
89
+ class AnyValue;
90
+
91
+ using JsFunctionCallable = std::variant<
92
+ std::function<AnyValue(AnyValue, std::span<const AnyValue>)>,
93
+ std::function<JsIterator<AnyValue>(AnyValue, std::vector<AnyValue>)>,
94
+ std::function<JsPromise(AnyValue, std::vector<AnyValue>)>,
95
+ std::function<JsAsyncIterator<AnyValue>(AnyValue, std::vector<AnyValue>)>>;
96
+
97
+ // Awaiter for AnyValue
98
+ struct AnyValueAwaiter;
99
+
100
+ // Truthiness checker
101
+ const bool is_truthy(const double &val) noexcept;
102
+ const bool is_truthy(const std::string &val) noexcept;
103
+ const bool is_truthy(const AnyValue &val) noexcept;
104
+
105
+ // Basic equality operators
106
+ inline const bool is_strictly_equal_to_primitive(const AnyValue &lhs, const double &rhs) noexcept;
107
+ inline const bool is_strictly_equal_to_primitive(const double &lhs, const AnyValue &rhs) noexcept;
108
+ inline const bool is_strictly_equal_to_primitive(const double &lhs, const double &rhs) noexcept;
109
+ inline const bool is_strictly_equal_to_primitive(const AnyValue &lhs, const AnyValue &rhs) noexcept;
110
+
111
+ inline const bool is_equal_to_primitive(const AnyValue &lhs, const double &rhs) noexcept;
112
+ inline const bool is_equal_to_primitive(const double &lhs, const AnyValue &rhs) noexcept;
113
+ inline const bool is_equal_to_primitive(const double &lhs, const double &rhs) noexcept;
114
+ inline const bool is_equal_to_primitive(const AnyValue &lhs, const AnyValue &rhs) noexcept;
115
+
116
+ inline const AnyValue is_strictly_equal_to(const AnyValue &lhs, const double &rhs) noexcept;
117
+ inline const AnyValue is_strictly_equal_to(const double &lhs, const AnyValue &rhs) noexcept;
118
+ inline const AnyValue is_strictly_equal_to(const double &lhs, const double &rhs) noexcept;
119
+ inline const AnyValue is_strictly_equal_to(const AnyValue &lhs, const AnyValue &rhs) noexcept;
120
+
121
+ inline const AnyValue is_equal_to(const AnyValue &lhs, const double &rhs) noexcept;
122
+ inline const AnyValue is_equal_to(const double &lhs, const AnyValue &rhs) noexcept;
123
+ inline const AnyValue is_equal_to(const double &lhs, const double &rhs) noexcept;
124
+ inline const AnyValue is_equal_to(const AnyValue &lhs, const AnyValue &rhs) noexcept;
125
+
126
+ inline const AnyValue not_strictly_equal_to(const AnyValue &lhs, const double &rhs) noexcept;
127
+ inline const AnyValue not_strictly_equal_to(const double &lhs, const AnyValue &rhs) noexcept;
128
+ inline const AnyValue not_strictly_equal_to(const double &lhs, const double &rhs) noexcept;
129
+ inline const AnyValue not_strictly_equal_to(const AnyValue &lhs, const AnyValue &rhs) noexcept;
130
+
131
+ inline const AnyValue not_equal_to(const AnyValue &lhs, const double &rhs) noexcept;
132
+ inline const AnyValue not_equal_to(const double &lhs, const AnyValue &rhs) noexcept;
133
+ inline const AnyValue not_equal_to(const AnyValue &lhs, const AnyValue &rhs) noexcept;
134
+
135
+ // Bitwise operators
136
+ inline AnyValue unsigned_right_shift(const AnyValue &lhs, const AnyValue &rhs);
137
+ inline AnyValue unsigned_right_shift(const AnyValue &lhs, const double &rhs);
138
+ inline AnyValue unsigned_right_shift(const double &lhs, const AnyValue &rhs);
139
+
140
+ // Arithemetic operators
141
+
142
+ inline AnyValue pow(const double &lhs, const double &rhs);
143
+ inline AnyValue pow(const AnyValue &lhs, const double &rhs);
144
+ inline AnyValue pow(const AnyValue &lhs, const AnyValue &rhs);
145
+
146
+ // AnyValue prototypes
147
+ namespace ObjectPrototypes
148
+ {
149
+ inline std::optional<AnyValue> get(const std::string &key);
150
+ }
151
+ namespace StringPrototypes
152
+ {
153
+ inline std::optional<AnyValue> get(const std::string &key);
154
+ }
155
+ namespace NumberPrototypes
156
+ {
157
+ inline std::optional<AnyValue> get(const std::string &key);
158
+ }
159
+ namespace ArrayPrototypes
160
+ {
161
+ inline std::optional<AnyValue> get(const std::string &key);
162
+ }
163
+ namespace FunctionPrototypes
164
+ {
165
+ inline std::optional<AnyValue> get(const std::string &key);
166
+ }
167
+ namespace PromisePrototypes
168
+ {
169
+ inline std::optional<AnyValue> get(const std::string &key);
170
+ }
171
+ namespace IteratorPrototypes
172
+ {
173
+ inline std::optional<AnyValue> get(const std::string &key);
174
+ }
175
+ namespace SymbolPrototypes
176
+ {
177
+ inline std::optional<AnyValue> get(const std::string &key);
178
+ }
179
179
  }