@ugo-studio/jspp 0.2.9 → 0.3.1

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 (97) hide show
  1. package/LICENSE +25 -25
  2. package/README.md +20 -12
  3. package/dist/analysis/scope.js +5 -3
  4. package/dist/analysis/typeAnalyzer.js +21 -25
  5. package/dist/cli/index.js +14 -4
  6. package/dist/cli/utils.js +61 -0
  7. package/dist/core/codegen/class-handlers.js +6 -6
  8. package/dist/core/codegen/control-flow-handlers.js +10 -9
  9. package/dist/core/codegen/declaration-handlers.js +10 -3
  10. package/dist/core/codegen/destructuring-handlers.js +9 -4
  11. package/dist/core/codegen/expression-handlers.js +40 -29
  12. package/dist/core/codegen/function-handlers.js +78 -12
  13. package/dist/core/codegen/helpers.js +91 -14
  14. package/dist/core/codegen/index.js +4 -2
  15. package/dist/core/codegen/statement-handlers.js +9 -7
  16. package/package.json +2 -2
  17. package/scripts/precompile-headers.ts +249 -50
  18. package/scripts/setup-compiler.ts +63 -63
  19. package/src/prelude/any_value.cpp +636 -0
  20. package/src/prelude/any_value.hpp +369 -362
  21. package/src/prelude/{exception_helpers.hpp → exception.cpp} +53 -53
  22. package/src/prelude/exception.hpp +27 -27
  23. package/src/prelude/iterator_instantiations.hpp +10 -0
  24. package/src/prelude/{index.hpp → jspp.hpp} +10 -16
  25. package/src/prelude/library/array.cpp +191 -0
  26. package/src/prelude/library/array.hpp +13 -186
  27. package/src/prelude/library/console.cpp +125 -0
  28. package/src/prelude/library/console.hpp +24 -112
  29. package/src/prelude/library/error.cpp +100 -0
  30. package/src/prelude/library/error.hpp +13 -113
  31. package/src/prelude/library/function.cpp +69 -0
  32. package/src/prelude/library/function.hpp +11 -10
  33. package/src/prelude/library/global.cpp +96 -0
  34. package/src/prelude/library/global.hpp +12 -28
  35. package/src/prelude/library/global_usings.hpp +15 -0
  36. package/src/prelude/library/math.cpp +258 -0
  37. package/src/prelude/library/math.hpp +26 -308
  38. package/src/prelude/library/object.cpp +379 -0
  39. package/src/prelude/library/object.hpp +14 -276
  40. package/src/prelude/library/performance.cpp +21 -0
  41. package/src/prelude/library/performance.hpp +5 -20
  42. package/src/prelude/library/process.cpp +38 -0
  43. package/src/prelude/library/process.hpp +11 -39
  44. package/src/prelude/library/promise.cpp +131 -0
  45. package/src/prelude/library/promise.hpp +12 -123
  46. package/src/prelude/library/symbol.cpp +56 -0
  47. package/src/prelude/library/symbol.hpp +11 -52
  48. package/src/prelude/library/timer.cpp +88 -0
  49. package/src/prelude/library/timer.hpp +16 -92
  50. package/src/prelude/runtime.cpp +19 -0
  51. package/src/prelude/types.hpp +184 -179
  52. package/src/prelude/utils/access.hpp +502 -411
  53. package/src/prelude/utils/assignment_operators.hpp +99 -99
  54. package/src/prelude/utils/log_any_value/array.hpp +61 -40
  55. package/src/prelude/utils/log_any_value/function.hpp +39 -39
  56. package/src/prelude/utils/log_any_value/object.hpp +60 -3
  57. package/src/prelude/utils/operators.hpp +351 -336
  58. package/src/prelude/utils/operators_primitive.hpp +336 -336
  59. package/src/prelude/utils/well_known_symbols.hpp +24 -24
  60. package/src/prelude/values/array.cpp +1399 -0
  61. package/src/prelude/values/array.hpp +4 -1
  62. package/src/prelude/values/async_iterator.cpp +251 -0
  63. package/src/prelude/values/async_iterator.hpp +111 -83
  64. package/src/prelude/values/function.cpp +262 -0
  65. package/src/prelude/values/function.hpp +62 -82
  66. package/src/prelude/values/iterator.cpp +309 -0
  67. package/src/prelude/values/iterator.hpp +33 -64
  68. package/src/prelude/values/number.cpp +176 -0
  69. package/src/prelude/values/object.cpp +159 -0
  70. package/src/prelude/values/object.hpp +4 -0
  71. package/src/prelude/values/promise.cpp +479 -0
  72. package/src/prelude/values/promise.hpp +79 -72
  73. package/src/prelude/values/prototypes/array.hpp +46 -1336
  74. package/src/prelude/values/prototypes/async_iterator.hpp +19 -61
  75. package/src/prelude/values/prototypes/function.hpp +7 -46
  76. package/src/prelude/values/prototypes/iterator.hpp +25 -201
  77. package/src/prelude/values/prototypes/number.hpp +23 -210
  78. package/src/prelude/values/prototypes/object.hpp +7 -23
  79. package/src/prelude/values/prototypes/promise.hpp +18 -196
  80. package/src/prelude/values/prototypes/string.hpp +39 -542
  81. package/src/prelude/values/prototypes/symbol.hpp +9 -70
  82. package/src/prelude/values/shape.hpp +52 -52
  83. package/src/prelude/values/string.cpp +485 -0
  84. package/src/prelude/values/string.hpp +25 -26
  85. package/src/prelude/values/symbol.cpp +89 -0
  86. package/src/prelude/values/symbol.hpp +101 -101
  87. package/src/prelude/any_value_access.hpp +0 -170
  88. package/src/prelude/any_value_defines.hpp +0 -190
  89. package/src/prelude/any_value_helpers.hpp +0 -374
  90. package/src/prelude/values/helpers/array.hpp +0 -209
  91. package/src/prelude/values/helpers/async_iterator.hpp +0 -275
  92. package/src/prelude/values/helpers/function.hpp +0 -109
  93. package/src/prelude/values/helpers/iterator.hpp +0 -145
  94. package/src/prelude/values/helpers/object.hpp +0 -104
  95. package/src/prelude/values/helpers/promise.hpp +0 -254
  96. package/src/prelude/values/helpers/string.hpp +0 -61
  97. package/src/prelude/values/helpers/symbol.hpp +0 -21
@@ -1,179 +1,184 @@
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
- }
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
+ // Truthiness checker
98
+ const bool is_truthy(const double &val) noexcept;
99
+ const bool is_truthy(const std::string &val) noexcept;
100
+ const bool is_truthy(const AnyValue &val) noexcept;
101
+
102
+ // Basic equality operators
103
+ inline const bool is_strictly_equal_to_primitive(const AnyValue &lhs, const double &rhs) noexcept;
104
+ inline const bool is_strictly_equal_to_primitive(const double &lhs, const AnyValue &rhs) noexcept;
105
+ inline const bool is_strictly_equal_to_primitive(const double &lhs, const double &rhs) noexcept;
106
+ inline const bool is_strictly_equal_to_primitive(const AnyValue &lhs, const AnyValue &rhs) noexcept;
107
+
108
+ inline const bool is_equal_to_primitive(const AnyValue &lhs, const double &rhs) noexcept;
109
+ inline const bool is_equal_to_primitive(const double &lhs, const AnyValue &rhs) noexcept;
110
+ inline const bool is_equal_to_primitive(const double &lhs, const double &rhs) noexcept;
111
+ inline const bool is_equal_to_primitive(const AnyValue &lhs, const AnyValue &rhs) noexcept;
112
+
113
+ inline const AnyValue is_strictly_equal_to(const AnyValue &lhs, const double &rhs) noexcept;
114
+ inline const AnyValue is_strictly_equal_to(const double &lhs, const AnyValue &rhs) noexcept;
115
+ inline const AnyValue is_strictly_equal_to(const double &lhs, const double &rhs) noexcept;
116
+ inline const AnyValue is_strictly_equal_to(const AnyValue &lhs, const AnyValue &rhs) noexcept;
117
+
118
+ inline const AnyValue is_equal_to(const AnyValue &lhs, const double &rhs) noexcept;
119
+ inline const AnyValue is_equal_to(const double &lhs, const AnyValue &rhs) noexcept;
120
+ inline const AnyValue is_equal_to(const double &lhs, const double &rhs) noexcept;
121
+ inline const AnyValue is_equal_to(const AnyValue &lhs, const AnyValue &rhs) noexcept;
122
+
123
+ inline const AnyValue not_strictly_equal_to(const AnyValue &lhs, const double &rhs) noexcept;
124
+ inline const AnyValue not_strictly_equal_to(const double &lhs, const AnyValue &rhs) noexcept;
125
+ inline const AnyValue not_strictly_equal_to(const double &lhs, const double &rhs) noexcept;
126
+ inline const AnyValue not_strictly_equal_to(const AnyValue &lhs, const AnyValue &rhs) noexcept;
127
+
128
+ inline const AnyValue not_equal_to(const AnyValue &lhs, const double &rhs) noexcept;
129
+ inline const AnyValue not_equal_to(const double &lhs, const AnyValue &rhs) noexcept;
130
+ inline const AnyValue not_equal_to(const AnyValue &lhs, const AnyValue &rhs) noexcept;
131
+
132
+ // Bitwise operators
133
+ inline AnyValue unsigned_right_shift(const AnyValue &lhs, const AnyValue &rhs);
134
+ inline AnyValue unsigned_right_shift(const AnyValue &lhs, const double &rhs);
135
+ inline AnyValue unsigned_right_shift(const double &lhs, const AnyValue &rhs);
136
+
137
+ // Arithemetic operators
138
+
139
+ inline AnyValue pow(const double &lhs, const double &rhs);
140
+ inline AnyValue pow(const AnyValue &lhs, const double &rhs);
141
+ inline AnyValue pow(const AnyValue &lhs, const AnyValue &rhs);
142
+
143
+ // AnyValue prototypes
144
+ namespace ObjectPrototypes
145
+ {
146
+ std::optional<AnyValue> get(const std::string &key);
147
+ std::optional<AnyValue> get(const AnyValue &key);
148
+ }
149
+ namespace StringPrototypes
150
+ {
151
+ std::optional<AnyValue> get(const std::string &key);
152
+ std::optional<AnyValue> get(const AnyValue &key);
153
+ }
154
+ namespace NumberPrototypes
155
+ {
156
+ std::optional<AnyValue> get(const std::string &key);
157
+ std::optional<AnyValue> get(const AnyValue &key);
158
+ }
159
+ namespace ArrayPrototypes
160
+ {
161
+ std::optional<AnyValue> get(const std::string &key);
162
+ std::optional<AnyValue> get(const AnyValue &key);
163
+ }
164
+ namespace FunctionPrototypes
165
+ {
166
+ std::optional<AnyValue> get(const std::string &key);
167
+ std::optional<AnyValue> get(const AnyValue &key);
168
+ }
169
+ namespace PromisePrototypes
170
+ {
171
+ std::optional<AnyValue> get(const std::string &key);
172
+ std::optional<AnyValue> get(const AnyValue &key);
173
+ }
174
+ namespace IteratorPrototypes
175
+ {
176
+ std::optional<AnyValue> get(const std::string &key);
177
+ std::optional<AnyValue> get(const AnyValue &key);
178
+ }
179
+ namespace SymbolPrototypes
180
+ {
181
+ std::optional<AnyValue> get(const std::string &key);
182
+ std::optional<AnyValue> get(const AnyValue &key);
183
+ }
184
+ }