@ugo-studio/jspp 0.3.0 → 0.3.2

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 (127) hide show
  1. package/LICENSE +25 -25
  2. package/README.md +20 -12
  3. package/dist/cli/args.js +22 -0
  4. package/dist/cli/compiler.js +53 -0
  5. package/dist/cli/index.js +43 -107
  6. package/dist/cli/pch.js +71 -0
  7. package/dist/cli/runner.js +23 -0
  8. package/dist/cli/spinner.js +27 -11
  9. package/dist/cli/transpiler.js +20 -0
  10. package/dist/cli/utils.js +59 -0
  11. package/dist/cli/wasm.js +70 -0
  12. package/dist/index.js +17 -6
  13. package/dist/{analysis → interpreter/analysis}/scope.js +38 -3
  14. package/dist/{analysis → interpreter/analysis}/typeAnalyzer.js +563 -28
  15. package/dist/{core → interpreter/core}/codegen/class-handlers.js +1 -1
  16. package/dist/{core → interpreter/core}/codegen/control-flow-handlers.js +12 -11
  17. package/dist/{core → interpreter/core}/codegen/declaration-handlers.js +28 -9
  18. package/dist/{core → interpreter/core}/codegen/destructuring-handlers.js +9 -4
  19. package/dist/{core → interpreter/core}/codegen/expression-handlers.js +82 -88
  20. package/dist/{core → interpreter/core}/codegen/function-handlers.js +159 -46
  21. package/dist/{core → interpreter/core}/codegen/helpers.js +170 -25
  22. package/dist/interpreter/core/codegen/index.js +156 -0
  23. package/dist/{core → interpreter/core}/codegen/literal-handlers.js +9 -0
  24. package/dist/{core → interpreter/core}/codegen/statement-handlers.js +47 -7
  25. package/package.json +6 -4
  26. package/scripts/precompile-headers.ts +293 -50
  27. package/scripts/setup-compiler.ts +63 -63
  28. package/scripts/setup-emsdk.ts +114 -0
  29. package/src/prelude/any_value.cpp +888 -0
  30. package/src/prelude/any_value.hpp +29 -24
  31. package/src/prelude/{exception_helpers.hpp → exception.cpp} +53 -53
  32. package/src/prelude/exception.hpp +27 -27
  33. package/src/prelude/iterator_instantiations.hpp +10 -0
  34. package/src/prelude/{index.hpp → jspp.hpp} +13 -17
  35. package/src/prelude/library/array.cpp +191 -0
  36. package/src/prelude/library/array.hpp +5 -178
  37. package/src/prelude/library/boolean.cpp +30 -0
  38. package/src/prelude/library/boolean.hpp +14 -0
  39. package/src/prelude/library/console.cpp +125 -0
  40. package/src/prelude/library/console.hpp +9 -97
  41. package/src/prelude/library/error.cpp +100 -0
  42. package/src/prelude/library/error.hpp +8 -108
  43. package/src/prelude/library/function.cpp +69 -0
  44. package/src/prelude/library/function.hpp +6 -5
  45. package/src/prelude/library/global.cpp +98 -0
  46. package/src/prelude/library/global.hpp +12 -28
  47. package/src/prelude/library/global_usings.hpp +15 -0
  48. package/src/prelude/library/math.cpp +261 -0
  49. package/src/prelude/library/math.hpp +8 -288
  50. package/src/prelude/library/object.cpp +379 -0
  51. package/src/prelude/library/object.hpp +5 -267
  52. package/src/prelude/library/performance.cpp +21 -0
  53. package/src/prelude/library/performance.hpp +5 -20
  54. package/src/prelude/library/process.cpp +38 -0
  55. package/src/prelude/library/process.hpp +3 -31
  56. package/src/prelude/library/promise.cpp +131 -0
  57. package/src/prelude/library/promise.hpp +5 -116
  58. package/src/prelude/library/symbol.cpp +56 -0
  59. package/src/prelude/library/symbol.hpp +5 -46
  60. package/src/prelude/library/timer.cpp +88 -0
  61. package/src/prelude/library/timer.hpp +11 -87
  62. package/src/prelude/runtime.cpp +19 -0
  63. package/src/prelude/types.hpp +26 -20
  64. package/src/prelude/utils/access.hpp +123 -32
  65. package/src/prelude/utils/assignment_operators.hpp +119 -99
  66. package/src/prelude/utils/log_any_value/array.hpp +61 -40
  67. package/src/prelude/utils/log_any_value/function.hpp +39 -39
  68. package/src/prelude/utils/log_any_value/log_any_value.hpp +1 -1
  69. package/src/prelude/utils/log_any_value/object.hpp +60 -3
  70. package/src/prelude/utils/log_any_value/primitives.hpp +1 -1
  71. package/src/prelude/utils/operators.hpp +109 -94
  72. package/src/prelude/utils/operators_native.hpp +349 -0
  73. package/src/prelude/utils/well_known_symbols.hpp +24 -24
  74. package/src/prelude/values/array.cpp +1399 -0
  75. package/src/prelude/values/array.hpp +4 -0
  76. package/src/prelude/values/async_iterator.cpp +251 -0
  77. package/src/prelude/values/async_iterator.hpp +60 -32
  78. package/src/prelude/values/boolean.cpp +64 -0
  79. package/src/prelude/values/function.cpp +262 -0
  80. package/src/prelude/values/function.hpp +10 -30
  81. package/src/prelude/values/iterator.cpp +309 -0
  82. package/src/prelude/values/iterator.hpp +33 -64
  83. package/src/prelude/values/number.cpp +221 -0
  84. package/src/prelude/values/object.cpp +200 -0
  85. package/src/prelude/values/object.hpp +4 -0
  86. package/src/prelude/values/promise.cpp +479 -0
  87. package/src/prelude/values/promise.hpp +9 -2
  88. package/src/prelude/values/prototypes/array.hpp +46 -1348
  89. package/src/prelude/values/prototypes/async_iterator.hpp +19 -61
  90. package/src/prelude/values/prototypes/boolean.hpp +24 -0
  91. package/src/prelude/values/prototypes/function.hpp +7 -46
  92. package/src/prelude/values/prototypes/iterator.hpp +15 -191
  93. package/src/prelude/values/prototypes/number.hpp +30 -210
  94. package/src/prelude/values/prototypes/object.hpp +7 -23
  95. package/src/prelude/values/prototypes/promise.hpp +8 -186
  96. package/src/prelude/values/prototypes/string.hpp +28 -553
  97. package/src/prelude/values/prototypes/symbol.hpp +9 -70
  98. package/src/prelude/values/shape.hpp +52 -52
  99. package/src/prelude/values/string.cpp +485 -0
  100. package/src/prelude/values/symbol.cpp +89 -0
  101. package/src/prelude/values/symbol.hpp +101 -101
  102. package/dist/cli/file-utils.js +0 -20
  103. package/dist/cli-utils/args.js +0 -59
  104. package/dist/cli-utils/colors.js +0 -9
  105. package/dist/cli-utils/file-utils.js +0 -20
  106. package/dist/cli-utils/spinner.js +0 -55
  107. package/dist/cli.js +0 -153
  108. package/dist/core/codegen/index.js +0 -86
  109. package/src/prelude/any_value_access.hpp +0 -170
  110. package/src/prelude/any_value_defines.hpp +0 -190
  111. package/src/prelude/any_value_helpers.hpp +0 -374
  112. package/src/prelude/utils/operators_primitive.hpp +0 -337
  113. package/src/prelude/values/helpers/array.hpp +0 -199
  114. package/src/prelude/values/helpers/async_iterator.hpp +0 -275
  115. package/src/prelude/values/helpers/function.hpp +0 -109
  116. package/src/prelude/values/helpers/iterator.hpp +0 -145
  117. package/src/prelude/values/helpers/object.hpp +0 -104
  118. package/src/prelude/values/helpers/promise.hpp +0 -254
  119. package/src/prelude/values/helpers/string.hpp +0 -37
  120. package/src/prelude/values/helpers/symbol.hpp +0 -21
  121. /package/dist/{ast → interpreter/ast}/symbols.js +0 -0
  122. /package/dist/{ast → interpreter/ast}/types.js +0 -0
  123. /package/dist/{core → interpreter/core}/codegen/visitor.js +0 -0
  124. /package/dist/{core → interpreter/core}/constants.js +0 -0
  125. /package/dist/{core → interpreter/core}/error.js +0 -0
  126. /package/dist/{core → interpreter/core}/parser.js +0 -0
  127. /package/dist/{core → interpreter/core}/traverser.js +0 -0
@@ -1,80 +1,19 @@
1
1
  #pragma once
2
2
 
3
3
  #include "types.hpp"
4
- #include "values/symbol.hpp"
5
- #include "any_value.hpp"
6
- #include "utils/well_known_symbols.hpp"
4
+ #include <optional>
7
5
 
8
6
  namespace jspp
9
7
  {
8
+ class AnyValue;
9
+
10
10
  namespace SymbolPrototypes
11
11
  {
12
- inline AnyValue &get_toString_fn()
13
- {
14
- static AnyValue fn = AnyValue::make_function([](const AnyValue &thisVal, std::span<const AnyValue>) -> AnyValue
15
- { return AnyValue::make_string(thisVal.as_symbol()->to_std_string()); },
16
- "toString");
17
- return fn;
18
- }
19
-
20
- inline AnyValue &get_valueOf_fn()
21
- {
22
- static AnyValue fn = AnyValue::make_function([](const AnyValue &thisVal, std::span<const AnyValue>) -> AnyValue
23
- { return thisVal; },
24
- "valueOf");
25
- return fn;
26
- }
27
-
28
- inline AnyValue &get_toPrimitive_fn()
29
- {
30
- static AnyValue fn = AnyValue::make_function([](const AnyValue &thisVal, std::span<const AnyValue>) -> AnyValue
31
- { return thisVal; },
32
- "[Symbol.toPrimitive]");
33
- return fn;
34
- }
35
-
36
- inline AnyValue &get_description_desc()
37
- {
38
- static auto getter = [](const AnyValue &thisVal, std::span<const AnyValue>) -> AnyValue
39
- {
40
- auto self = thisVal.as_symbol();
41
- if (self->description.empty())
42
- {
43
- return Constants::UNDEFINED;
44
- }
45
- return AnyValue::make_string(self->description);
46
- };
47
- static AnyValue desc = AnyValue::make_accessor_descriptor(getter, std::nullopt, false, true);
48
- return desc;
49
- }
50
-
51
- inline std::optional<AnyValue> get(const std::string &key)
52
- {
53
- // --- toString() method ---
54
- if (key == "toString" || key == WellKnownSymbols::toStringTag->key)
55
- {
56
- return get_toString_fn();
57
- }
58
-
59
- // --- valueOf() method ---
60
- if (key == "valueOf")
61
- {
62
- return get_valueOf_fn();
63
- }
64
-
65
- // --- [Symbol.toPrimitive] ---
66
- if (key == WellKnownSymbols::toPrimitive->key)
67
- {
68
- return get_toPrimitive_fn();
69
- }
70
-
71
- // --- description property ---
72
- if (key == "description")
73
- {
74
- return get_description_desc();
75
- }
76
-
77
- return std::nullopt;
78
- }
12
+ AnyValue &get_toString_fn();
13
+ AnyValue &get_valueOf_fn();
14
+ AnyValue &get_toPrimitive_fn();
15
+ AnyValue &get_description_desc();
16
+ std::optional<AnyValue> get(const std::string &key);
17
+ std::optional<AnyValue> get(const AnyValue &key);
79
18
  }
80
19
  }
@@ -1,52 +1,52 @@
1
- #pragma once
2
-
3
- #include <string>
4
- #include <unordered_map>
5
- #include <vector>
6
- #include <memory>
7
- #include <optional>
8
- #include <span>
9
-
10
- namespace jspp {
11
-
12
- class Shape {
13
- public:
14
- // Map property name -> storage index
15
- std::unordered_map<std::string, uint32_t> property_offsets;
16
- // Map property name -> next Shape (transitions)
17
- std::unordered_map<std::string, std::shared_ptr<Shape>> transitions;
18
-
19
- // For fast enumeration (Object.keys)
20
- std::vector<std::string> property_names;
21
-
22
- // Singleton empty shape
23
- static std::shared_ptr<Shape> empty_shape() {
24
- static auto shape = std::make_shared<Shape>();
25
- return shape;
26
- }
27
-
28
- std::optional<uint32_t> get_offset(const std::string& name) const {
29
- auto it = property_offsets.find(name);
30
- if (it != property_offsets.end()) return it->second;
31
- return std::nullopt;
32
- }
33
-
34
- std::shared_ptr<Shape> transition(const std::string& name) {
35
- auto it = transitions.find(name);
36
- if (it != transitions.end()) return it->second;
37
-
38
- // Create new shape
39
- auto new_shape = std::make_shared<Shape>();
40
- new_shape->property_offsets = this->property_offsets;
41
- new_shape->property_names = this->property_names;
42
-
43
- uint32_t new_offset = static_cast<uint32_t>(new_shape->property_offsets.size());
44
- new_shape->property_offsets[name] = new_offset;
45
- new_shape->property_names.push_back(name);
46
-
47
- transitions[name] = new_shape;
48
- return new_shape;
49
- }
50
- };
51
-
52
- }
1
+ #pragma once
2
+
3
+ #include <string>
4
+ #include <unordered_map>
5
+ #include <vector>
6
+ #include <memory>
7
+ #include <optional>
8
+ #include <span>
9
+
10
+ namespace jspp {
11
+
12
+ class Shape {
13
+ public:
14
+ // Map property name -> storage index
15
+ std::unordered_map<std::string, uint32_t> property_offsets;
16
+ // Map property name -> next Shape (transitions)
17
+ std::unordered_map<std::string, std::shared_ptr<Shape>> transitions;
18
+
19
+ // For fast enumeration (Object.keys)
20
+ std::vector<std::string> property_names;
21
+
22
+ // Singleton empty shape
23
+ static std::shared_ptr<Shape> empty_shape() {
24
+ static auto shape = std::make_shared<Shape>();
25
+ return shape;
26
+ }
27
+
28
+ std::optional<uint32_t> get_offset(const std::string& name) const {
29
+ auto it = property_offsets.find(name);
30
+ if (it != property_offsets.end()) return it->second;
31
+ return std::nullopt;
32
+ }
33
+
34
+ std::shared_ptr<Shape> transition(const std::string& name) {
35
+ auto it = transitions.find(name);
36
+ if (it != transitions.end()) return it->second;
37
+
38
+ // Create new shape
39
+ auto new_shape = std::make_shared<Shape>();
40
+ new_shape->property_offsets = this->property_offsets;
41
+ new_shape->property_names = this->property_names;
42
+
43
+ uint32_t new_offset = static_cast<uint32_t>(new_shape->property_offsets.size());
44
+ new_shape->property_offsets[name] = new_offset;
45
+ new_shape->property_names.push_back(name);
46
+
47
+ transitions[name] = new_shape;
48
+ return new_shape;
49
+ }
50
+ };
51
+
52
+ }