@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.
Files changed (71) hide show
  1. package/dist/analysis/scope.js +17 -0
  2. package/dist/analysis/typeAnalyzer.js +7 -1
  3. package/dist/ast/symbols.js +32 -0
  4. package/dist/ast/types.js +0 -6
  5. package/dist/cli-utils/args.js +57 -0
  6. package/dist/cli-utils/colors.js +9 -0
  7. package/dist/cli-utils/file-utils.js +20 -0
  8. package/dist/cli-utils/spinner.js +55 -0
  9. package/dist/cli.js +105 -30
  10. package/dist/core/codegen/class-handlers.js +10 -6
  11. package/dist/core/codegen/control-flow-handlers.js +57 -28
  12. package/dist/core/codegen/declaration-handlers.js +10 -6
  13. package/dist/core/codegen/expression-handlers.js +206 -61
  14. package/dist/core/codegen/function-handlers.js +203 -76
  15. package/dist/core/codegen/helpers.js +125 -28
  16. package/dist/core/codegen/index.js +23 -15
  17. package/dist/core/codegen/literal-handlers.js +15 -6
  18. package/dist/core/codegen/statement-handlers.js +282 -84
  19. package/dist/core/codegen/visitor.js +3 -1
  20. package/package.json +1 -1
  21. package/src/prelude/any_value.hpp +221 -342
  22. package/src/prelude/any_value_access.hpp +168 -81
  23. package/src/prelude/any_value_defines.hpp +74 -35
  24. package/src/prelude/any_value_helpers.hpp +75 -180
  25. package/src/prelude/exception.hpp +1 -0
  26. package/src/prelude/exception_helpers.hpp +4 -4
  27. package/src/prelude/index.hpp +12 -2
  28. package/src/prelude/library/array.hpp +190 -0
  29. package/src/prelude/library/console.hpp +6 -5
  30. package/src/prelude/library/error.hpp +10 -8
  31. package/src/prelude/library/function.hpp +10 -0
  32. package/src/prelude/library/global.hpp +20 -0
  33. package/src/prelude/library/math.hpp +308 -0
  34. package/src/prelude/library/object.hpp +288 -0
  35. package/src/prelude/library/performance.hpp +1 -1
  36. package/src/prelude/library/process.hpp +39 -0
  37. package/src/prelude/library/promise.hpp +57 -55
  38. package/src/prelude/library/symbol.hpp +45 -57
  39. package/src/prelude/library/timer.hpp +6 -6
  40. package/src/prelude/types.hpp +54 -0
  41. package/src/prelude/utils/access.hpp +215 -11
  42. package/src/prelude/utils/assignment_operators.hpp +99 -0
  43. package/src/prelude/utils/log_any_value/array.hpp +8 -8
  44. package/src/prelude/utils/log_any_value/function.hpp +6 -4
  45. package/src/prelude/utils/log_any_value/object.hpp +41 -24
  46. package/src/prelude/utils/log_any_value/primitives.hpp +3 -1
  47. package/src/prelude/utils/operators.hpp +750 -274
  48. package/src/prelude/utils/well_known_symbols.hpp +12 -0
  49. package/src/prelude/values/array.hpp +8 -6
  50. package/src/prelude/values/async_iterator.hpp +79 -0
  51. package/src/prelude/values/descriptors.hpp +2 -2
  52. package/src/prelude/values/function.hpp +72 -62
  53. package/src/prelude/values/helpers/array.hpp +64 -28
  54. package/src/prelude/values/helpers/async_iterator.hpp +275 -0
  55. package/src/prelude/values/helpers/function.hpp +81 -92
  56. package/src/prelude/values/helpers/iterator.hpp +3 -3
  57. package/src/prelude/values/helpers/object.hpp +54 -9
  58. package/src/prelude/values/helpers/promise.hpp +13 -6
  59. package/src/prelude/values/iterator.hpp +1 -1
  60. package/src/prelude/values/object.hpp +10 -3
  61. package/src/prelude/values/promise.hpp +7 -11
  62. package/src/prelude/values/prototypes/array.hpp +851 -12
  63. package/src/prelude/values/prototypes/async_iterator.hpp +50 -0
  64. package/src/prelude/values/prototypes/function.hpp +2 -2
  65. package/src/prelude/values/prototypes/iterator.hpp +5 -5
  66. package/src/prelude/values/prototypes/number.hpp +153 -0
  67. package/src/prelude/values/prototypes/object.hpp +2 -2
  68. package/src/prelude/values/prototypes/promise.hpp +40 -30
  69. package/src/prelude/values/prototypes/string.hpp +28 -28
  70. package/src/prelude/values/prototypes/symbol.hpp +20 -3
  71. package/src/prelude/values/shape.hpp +52 -0
@@ -3,6 +3,7 @@
3
3
  #include "types.hpp"
4
4
  #include "values/symbol.hpp"
5
5
  #include "any_value.hpp"
6
+ #include "utils/well_known_symbols.hpp"
6
7
 
7
8
  namespace jspp
8
9
  {
@@ -11,18 +12,34 @@ namespace jspp
11
12
  inline std::optional<AnyValue> get(const std::string &key, JsSymbol *self)
12
13
  {
13
14
  // --- toString() method ---
14
- if (key == "toString" )
15
+ if (key == "toString" || key == WellKnownSymbols::toStringTag->key)
15
16
  {
16
- return AnyValue::make_function([self](const AnyValue &thisVal, const std::vector<AnyValue> &) -> AnyValue
17
+ return AnyValue::make_function([self](const AnyValue &thisVal, std::span<const AnyValue>) -> AnyValue
17
18
  { return AnyValue::make_string(self->to_std_string()); },
18
19
  key);
19
20
  }
20
21
 
22
+ // --- valueOf() method ---
23
+ if (key == "valueOf")
24
+ {
25
+ return AnyValue::make_function([self](const AnyValue &thisVal, std::span<const AnyValue>) -> AnyValue
26
+ { return thisVal; },
27
+ key);
28
+ }
29
+
30
+ // --- [Symbol.toPrimitive] ---
31
+ if (key == WellKnownSymbols::toPrimitive->key)
32
+ {
33
+ return AnyValue::make_function([self](const AnyValue &thisVal, std::span<const AnyValue>) -> AnyValue
34
+ { return thisVal; },
35
+ "[Symbol.toPrimitive]");
36
+ }
37
+
21
38
  // --- description property ---
22
39
  if (key == "description")
23
40
  {
24
41
  return AnyValue::make_accessor_descriptor(
25
- [self](const AnyValue &thisVal, const std::vector<AnyValue> &) -> AnyValue
42
+ [self](const AnyValue &thisVal, std::span<const AnyValue>) -> AnyValue
26
43
  {
27
44
  if (self->description.empty())
28
45
  {
@@ -0,0 +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
+ }