@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
@@ -17,18 +17,21 @@ namespace jspp
17
17
  {
18
18
  auto obj = val.as_object();
19
19
 
20
- size_t prop_count = obj->props.size();
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
- if (use_horizontal_layout)
23
+ for (size_t i = 0; i < obj->storage.size(); ++i)
24
24
  {
25
- for (const auto &pair : obj->props)
25
+ const auto& prop_val = obj->storage[i];
26
+ if (!is_enumerable_property(prop_val))
26
27
  {
27
- if (!is_simple_value(pair.second))
28
- {
29
- use_horizontal_layout = false;
30
- break;
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
- auto is_error = isErrorFn.as_function()->call(isErrorFn, {val}).is_truthy();
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.as_function()->call(val, {});
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 (const auto &pair : obj->props)
70
+ for (size_t i = 0; i < obj->shape->property_names.size(); ++i)
62
71
  {
63
- if (!is_enumerable_property(pair.second))
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(pair.first))
78
+ if (is_valid_js_identifier(key))
67
79
  {
68
- ss << pair.first;
80
+ ss << key;
69
81
  }
70
82
  else
71
83
  {
72
- ss << "\"" << pair.first << "\"";
84
+ ss << "\"" << key << "\"";
73
85
  }
74
- ss << ": " << to_log_string(pair.second, visited, depth + 1);
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 (const auto &pair : obj->props)
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(pair.first))
114
+ if (is_valid_js_identifier(key))
98
115
  {
99
- ss << pair.first;
116
+ ss << key;
100
117
  }
101
118
  else
102
119
  {
103
- ss << "\"" << pair.first << "\"";
120
+ ss << "\"" << key << "\"";
104
121
  }
105
- ss << ": " << to_log_string(pair.second, visited, depth + 1);
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
- return Color::BRIGHT_BLACK + std::string("<uninitialized>") + Color::RESET;
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())