@ugo-studio/jspp 0.3.1 → 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 (64) hide show
  1. package/dist/cli/args.js +22 -0
  2. package/dist/cli/compiler.js +53 -0
  3. package/dist/cli/index.js +43 -117
  4. package/dist/cli/pch.js +71 -0
  5. package/dist/cli/runner.js +23 -0
  6. package/dist/cli/spinner.js +27 -11
  7. package/dist/cli/transpiler.js +20 -0
  8. package/dist/cli/utils.js +25 -27
  9. package/dist/cli/wasm.js +70 -0
  10. package/dist/index.js +17 -6
  11. package/dist/{analysis → interpreter/analysis}/scope.js +34 -1
  12. package/dist/{analysis → interpreter/analysis}/typeAnalyzer.js +542 -3
  13. package/dist/{core → interpreter/core}/codegen/class-handlers.js +1 -1
  14. package/dist/{core → interpreter/core}/codegen/control-flow-handlers.js +2 -2
  15. package/dist/{core → interpreter/core}/codegen/declaration-handlers.js +21 -9
  16. package/dist/{core → interpreter/core}/codegen/destructuring-handlers.js +3 -3
  17. package/dist/{core → interpreter/core}/codegen/expression-handlers.js +44 -61
  18. package/dist/{core → interpreter/core}/codegen/function-handlers.js +108 -61
  19. package/dist/{core → interpreter/core}/codegen/helpers.js +79 -11
  20. package/dist/interpreter/core/codegen/index.js +156 -0
  21. package/dist/{core → interpreter/core}/codegen/literal-handlers.js +9 -0
  22. package/dist/{core → interpreter/core}/codegen/statement-handlers.js +39 -1
  23. package/package.json +6 -4
  24. package/scripts/precompile-headers.ts +63 -19
  25. package/scripts/setup-emsdk.ts +114 -0
  26. package/src/prelude/any_value.cpp +851 -599
  27. package/src/prelude/any_value.hpp +28 -30
  28. package/src/prelude/jspp.hpp +3 -1
  29. package/src/prelude/library/boolean.cpp +30 -0
  30. package/src/prelude/library/boolean.hpp +14 -0
  31. package/src/prelude/library/error.cpp +2 -2
  32. package/src/prelude/library/global.cpp +2 -0
  33. package/src/prelude/library/math.cpp +46 -43
  34. package/src/prelude/library/math.hpp +2 -0
  35. package/src/prelude/library/object.cpp +1 -1
  36. package/src/prelude/types.hpp +10 -9
  37. package/src/prelude/utils/access.hpp +2 -2
  38. package/src/prelude/utils/assignment_operators.hpp +40 -20
  39. package/src/prelude/utils/log_any_value/log_any_value.hpp +1 -1
  40. package/src/prelude/utils/log_any_value/primitives.hpp +1 -1
  41. package/src/prelude/utils/operators.hpp +87 -87
  42. package/src/prelude/utils/operators_native.hpp +349 -0
  43. package/src/prelude/utils/well_known_symbols.hpp +13 -13
  44. package/src/prelude/values/array.cpp +3 -3
  45. package/src/prelude/values/boolean.cpp +64 -0
  46. package/src/prelude/values/number.cpp +137 -92
  47. package/src/prelude/values/object.cpp +163 -122
  48. package/src/prelude/values/prototypes/boolean.hpp +24 -0
  49. package/src/prelude/values/prototypes/number.hpp +8 -1
  50. package/dist/cli/file-utils.js +0 -20
  51. package/dist/cli-utils/args.js +0 -59
  52. package/dist/cli-utils/colors.js +0 -9
  53. package/dist/cli-utils/file-utils.js +0 -20
  54. package/dist/cli-utils/spinner.js +0 -55
  55. package/dist/cli.js +0 -153
  56. package/dist/core/codegen/index.js +0 -88
  57. package/src/prelude/utils/operators_primitive.hpp +0 -337
  58. /package/dist/{ast → interpreter/ast}/symbols.js +0 -0
  59. /package/dist/{ast → interpreter/ast}/types.js +0 -0
  60. /package/dist/{core → interpreter/core}/codegen/visitor.js +0 -0
  61. /package/dist/{core → interpreter/core}/constants.js +0 -0
  62. /package/dist/{core → interpreter/core}/error.js +0 -0
  63. /package/dist/{core → interpreter/core}/parser.js +0 -0
  64. /package/dist/{core → interpreter/core}/traverser.js +0 -0
@@ -0,0 +1,114 @@
1
+ import { spawnSync } from "child_process";
2
+ import fs from "fs";
3
+ import { platform } from "os";
4
+ import path from "path";
5
+
6
+ const COLORS = {
7
+ reset: "\x1b[0m",
8
+ green: "\x1b[32m",
9
+ yellow: "\x1b[33m",
10
+ red: "\x1b[31m",
11
+ cyan: "\x1b[36m",
12
+ bold: "\x1b[1m",
13
+ };
14
+
15
+ const EMSDK_DIR = path.resolve(process.cwd(), ".emsdk");
16
+ const isWin = platform() === "win32";
17
+ const emsdkCmd = isWin ? "emsdk.bat" : "./emsdk";
18
+
19
+ function checkEmcc(): boolean {
20
+ try {
21
+ const result = spawnSync("emcc", ["--version"], { encoding: "utf8" });
22
+ return result.status === 0;
23
+ } catch (e) {
24
+ return false;
25
+ }
26
+ }
27
+
28
+ function runCommand(
29
+ cmd: string,
30
+ args: string[],
31
+ cwd: string = process.cwd(),
32
+ ): boolean {
33
+ console.log(`${COLORS.cyan}> ${cmd} ${args.join(" ")}${COLORS.reset}`);
34
+ const result = spawnSync(cmd, args, {
35
+ cwd,
36
+ stdio: "inherit",
37
+ shell: isWin,
38
+ });
39
+ return result.status === 0;
40
+ }
41
+
42
+ async function setup() {
43
+ console.log(
44
+ `${COLORS.bold}${COLORS.cyan}JSPP: Setting up Emscripten SDK for Wasm support...${COLORS.reset}`,
45
+ );
46
+
47
+ if (checkEmcc()) {
48
+ console.log(
49
+ `${COLORS.green}✔ Emscripten (emcc) found in PATH.${COLORS.reset}`,
50
+ );
51
+ return;
52
+ }
53
+
54
+ if (fs.existsSync(path.join(EMSDK_DIR, emsdkCmd))) {
55
+ console.log(
56
+ `${COLORS.yellow}ℹ Local EMSDK found in .emsdk directory.${COLORS.reset}`,
57
+ );
58
+ } else {
59
+ console.log(
60
+ `${COLORS.yellow}ℹ EMSDK not found. Cloning from GitHub...${COLORS.reset}`,
61
+ );
62
+ if (
63
+ !runCommand("git", [
64
+ "clone",
65
+ "https://github.com/emscripten-core/emsdk.git",
66
+ ".emsdk",
67
+ ])
68
+ ) {
69
+ console.error(
70
+ `${COLORS.red}Error: Failed to clone EMSDK repository. Make sure 'git' is installed.${COLORS.reset}`,
71
+ );
72
+ return;
73
+ }
74
+ }
75
+
76
+ console.log(
77
+ `${COLORS.cyan}Installing latest Emscripten SDK...${COLORS.reset}`,
78
+ );
79
+ if (!runCommand(emsdkCmd, ["install", "latest"], EMSDK_DIR)) {
80
+ console.error(
81
+ `${COLORS.red}Error: Failed to install Emscripten SDK.${COLORS.reset}`,
82
+ );
83
+ return;
84
+ }
85
+
86
+ console.log(
87
+ `${COLORS.cyan}Activating latest Emscripten SDK...${COLORS.reset}`,
88
+ );
89
+ if (
90
+ !runCommand(emsdkCmd, ["activate", "latest", "--permanent"], EMSDK_DIR)
91
+ ) {
92
+ console.error(
93
+ `${COLORS.red}Error: Failed to activate Emscripten SDK.${COLORS.reset}`,
94
+ );
95
+ return;
96
+ }
97
+
98
+ console.log(
99
+ `\n${COLORS.green}✔ Emscripten SDK setup complete.${COLORS.reset}`,
100
+ );
101
+ console.log(
102
+ `${COLORS.yellow}Note: To use emcc in your current terminal, you may need to run:${COLORS.reset}`,
103
+ );
104
+ if (isWin) {
105
+ console.log(`${COLORS.bold} .emsdk\\emsdk_env.bat${COLORS.reset}`);
106
+ } else {
107
+ console.log(
108
+ `${COLORS.bold} source .emsdk/emsdk_env.sh${COLORS.reset}`,
109
+ );
110
+ }
111
+ console.log("");
112
+ }
113
+
114
+ setup();