goscript 0.0.35 → 0.0.37

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 (228) hide show
  1. package/compiler/expr-call.go +26 -0
  2. package/compiler/spec-struct.go +41 -8
  3. package/compiler/spec-value.go +4 -0
  4. package/compiler/spec.go +1 -1
  5. package/compiler/stmt.go +26 -8
  6. package/dist/gs/internal/byteorder/index.d.ts +8 -0
  7. package/dist/gs/internal/byteorder/index.js +34 -0
  8. package/dist/gs/internal/byteorder/index.js.map +1 -0
  9. package/dist/gs/internal/testlog/index.d.ts +1 -0
  10. package/dist/gs/internal/testlog/index.js +5 -0
  11. package/dist/gs/internal/testlog/index.js.map +1 -0
  12. package/dist/gs/maps/iter.d.ts +1 -1
  13. package/dist/gs/os/dir.gs.d.ts +6 -0
  14. package/dist/gs/os/dir.gs.js +35 -0
  15. package/dist/gs/os/dir.gs.js.map +1 -0
  16. package/dist/gs/os/dir_unix.gs.d.ts +7 -0
  17. package/dist/gs/os/dir_unix.gs.js +113 -0
  18. package/dist/gs/os/dir_unix.gs.js.map +1 -0
  19. package/dist/gs/os/dirent_js.gs.d.ts +5 -0
  20. package/dist/gs/os/dirent_js.gs.js +20 -0
  21. package/dist/gs/os/dirent_js.gs.js.map +1 -0
  22. package/dist/gs/os/env.gs.d.ts +12 -0
  23. package/dist/gs/os/env.gs.js +157 -0
  24. package/dist/gs/os/env.gs.js.map +1 -0
  25. package/dist/gs/os/error.gs.d.ts +40 -0
  26. package/dist/gs/os/error.gs.js +158 -0
  27. package/dist/gs/os/error.gs.js.map +1 -0
  28. package/dist/gs/os/error_errno.gs.d.ts +1 -0
  29. package/dist/gs/os/error_errno.gs.js +5 -0
  30. package/dist/gs/os/error_errno.gs.js.map +1 -0
  31. package/dist/gs/os/exec.gs.d.ts +60 -0
  32. package/dist/gs/os/exec.gs.js +136 -0
  33. package/dist/gs/os/exec.gs.js.map +1 -0
  34. package/dist/gs/os/exec_nohandle.gs.d.ts +1 -0
  35. package/dist/gs/os/exec_nohandle.gs.js +2 -0
  36. package/dist/gs/os/exec_nohandle.gs.js.map +1 -0
  37. package/dist/gs/os/exec_posix.gs.d.ts +25 -0
  38. package/dist/gs/os/exec_posix.gs.js +67 -0
  39. package/dist/gs/os/exec_posix.gs.js.map +1 -0
  40. package/dist/gs/os/exec_unix.gs.d.ts +4 -0
  41. package/dist/gs/os/exec_unix.gs.js +46 -0
  42. package/dist/gs/os/exec_unix.gs.js.map +1 -0
  43. package/dist/gs/os/executable.gs.d.ts +2 -0
  44. package/dist/gs/os/executable.gs.js +16 -0
  45. package/dist/gs/os/executable.gs.js.map +1 -0
  46. package/dist/gs/os/executable_js.gs.d.ts +2 -0
  47. package/dist/gs/os/executable_js.gs.js +5 -0
  48. package/dist/gs/os/executable_js.gs.js.map +1 -0
  49. package/dist/gs/os/executable_wasm.gs.d.ts +2 -0
  50. package/dist/gs/os/executable_wasm.gs.js +6 -0
  51. package/dist/gs/os/executable_wasm.gs.js.map +1 -0
  52. package/dist/gs/os/file_constants_js.gs.d.ts +41 -0
  53. package/dist/gs/os/file_constants_js.gs.js +78 -0
  54. package/dist/gs/os/file_constants_js.gs.js.map +1 -0
  55. package/dist/gs/os/file_js.gs.d.ts +22 -0
  56. package/dist/gs/os/file_js.gs.js +73 -0
  57. package/dist/gs/os/file_js.gs.js.map +1 -0
  58. package/dist/gs/os/file_open_unix.gs.d.ts +6 -0
  59. package/dist/gs/os/file_open_unix.gs.js +10 -0
  60. package/dist/gs/os/file_open_unix.gs.js.map +1 -0
  61. package/dist/gs/os/file_posix_js.gs.d.ts +8 -0
  62. package/dist/gs/os/file_posix_js.gs.js +32 -0
  63. package/dist/gs/os/file_posix_js.gs.js.map +1 -0
  64. package/dist/gs/os/file_unix_js.gs.d.ts +27 -0
  65. package/dist/gs/os/file_unix_js.gs.js +64 -0
  66. package/dist/gs/os/file_unix_js.gs.js.map +1 -0
  67. package/dist/gs/os/getwd_js.gs.d.ts +6 -0
  68. package/dist/gs/os/getwd_js.gs.js +21 -0
  69. package/dist/gs/os/getwd_js.gs.js.map +1 -0
  70. package/dist/gs/os/index.d.ts +19 -0
  71. package/dist/gs/os/index.js +20 -0
  72. package/dist/gs/os/index.js.map +1 -0
  73. package/dist/gs/os/path.gs.d.ts +4 -0
  74. package/dist/gs/os/path.gs.js +32 -0
  75. package/dist/gs/os/path.gs.js.map +1 -0
  76. package/dist/gs/os/path_unix.gs.d.ts +4 -0
  77. package/dist/gs/os/path_unix.gs.js +40 -0
  78. package/dist/gs/os/path_unix.gs.js.map +1 -0
  79. package/dist/gs/os/pidfd_js.gs.d.ts +6 -0
  80. package/dist/gs/os/pidfd_js.gs.js +14 -0
  81. package/dist/gs/os/pidfd_js.gs.js.map +1 -0
  82. package/dist/gs/os/pipe_wasm.gs.d.ts +2 -0
  83. package/dist/gs/os/pipe_wasm.gs.js +14 -0
  84. package/dist/gs/os/pipe_wasm.gs.js.map +1 -0
  85. package/dist/gs/os/proc.gs.d.ts +11 -0
  86. package/dist/gs/os/proc.gs.js +68 -0
  87. package/dist/gs/os/proc.gs.js.map +1 -0
  88. package/dist/gs/os/proc_js.gs.d.ts +3 -0
  89. package/dist/gs/os/proc_js.gs.js +12 -0
  90. package/dist/gs/os/proc_js.gs.js.map +1 -0
  91. package/dist/gs/os/rawconn_js.gs.d.ts +10 -0
  92. package/dist/gs/os/rawconn_js.gs.js +26 -0
  93. package/dist/gs/os/rawconn_js.gs.js.map +1 -0
  94. package/dist/gs/os/removeall_js.gs.d.ts +2 -0
  95. package/dist/gs/os/removeall_js.gs.js +7 -0
  96. package/dist/gs/os/removeall_js.gs.js.map +1 -0
  97. package/dist/gs/os/root_js.gs.d.ts +23 -0
  98. package/dist/gs/os/root_js.gs.js +80 -0
  99. package/dist/gs/os/root_js.gs.js.map +1 -0
  100. package/dist/gs/os/root_nonwindows.gs.d.ts +2 -0
  101. package/dist/gs/os/root_nonwindows.gs.js +4 -0
  102. package/dist/gs/os/root_nonwindows.gs.js.map +1 -0
  103. package/dist/gs/os/root_noopenat.gs.d.ts +11 -0
  104. package/dist/gs/os/root_noopenat.gs.js +31 -0
  105. package/dist/gs/os/root_noopenat.gs.js.map +1 -0
  106. package/dist/gs/os/stat.gs.d.ts +24 -0
  107. package/dist/gs/os/stat.gs.js +20 -0
  108. package/dist/gs/os/stat.gs.js.map +1 -0
  109. package/dist/gs/os/stat_js.gs.d.ts +6 -0
  110. package/dist/gs/os/stat_js.gs.js +23 -0
  111. package/dist/gs/os/stat_js.gs.js.map +1 -0
  112. package/dist/gs/os/stat_unix_js.gs.d.ts +8 -0
  113. package/dist/gs/os/stat_unix_js.gs.js +16 -0
  114. package/dist/gs/os/stat_unix_js.gs.js.map +1 -0
  115. package/dist/gs/os/sticky_bsd.gs.d.ts +1 -0
  116. package/dist/gs/os/sticky_bsd.gs.js +3 -0
  117. package/dist/gs/os/sticky_bsd.gs.js.map +1 -0
  118. package/dist/gs/os/sys.gs.d.ts +2 -0
  119. package/dist/gs/os/sys.gs.js +10 -0
  120. package/dist/gs/os/sys.gs.js.map +1 -0
  121. package/dist/gs/os/sys_bsd.gs.d.ts +2 -0
  122. package/dist/gs/os/sys_bsd.gs.js +15 -0
  123. package/dist/gs/os/sys_bsd.gs.js.map +1 -0
  124. package/dist/gs/os/sys_js.gs.d.ts +2 -0
  125. package/dist/gs/os/sys_js.gs.js +6 -0
  126. package/dist/gs/os/sys_js.gs.js.map +1 -0
  127. package/dist/gs/os/tempfile.gs.d.ts +5 -0
  128. package/dist/gs/os/tempfile.gs.js +30 -0
  129. package/dist/gs/os/tempfile.gs.js.map +1 -0
  130. package/dist/gs/os/types.gs.d.ts +59 -0
  131. package/dist/gs/os/types.gs.js +123 -0
  132. package/dist/gs/os/types.gs.js.map +1 -0
  133. package/dist/gs/os/types_js.gs.d.ts +74 -0
  134. package/dist/gs/os/types_js.gs.js +147 -0
  135. package/dist/gs/os/types_js.gs.js.map +1 -0
  136. package/dist/gs/os/types_unix.gs.d.ts +40 -0
  137. package/dist/gs/os/types_unix.gs.js +87 -0
  138. package/dist/gs/os/types_unix.gs.js.map +1 -0
  139. package/dist/gs/os/wait_unimp.gs.d.ts +1 -0
  140. package/dist/gs/os/wait_unimp.gs.js +2 -0
  141. package/dist/gs/os/wait_unimp.gs.js.map +1 -0
  142. package/dist/gs/os/zero_copy_posix.gs.d.ts +4 -0
  143. package/dist/gs/os/zero_copy_posix.gs.js +27 -0
  144. package/dist/gs/os/zero_copy_posix.gs.js.map +1 -0
  145. package/dist/gs/os/zero_copy_stub.gs.d.ts +1 -0
  146. package/dist/gs/os/zero_copy_stub.gs.js +2 -0
  147. package/dist/gs/os/zero_copy_stub.gs.js.map +1 -0
  148. package/dist/gs/sync/atomic/doc.gs.d.ts +28 -0
  149. package/dist/gs/sync/atomic/doc.gs.js +265 -0
  150. package/dist/gs/sync/atomic/doc.gs.js.map +1 -0
  151. package/dist/gs/sync/atomic/doc_64.gs.d.ts +15 -0
  152. package/dist/gs/sync/atomic/doc_64.gs.js +165 -0
  153. package/dist/gs/sync/atomic/doc_64.gs.js.map +1 -0
  154. package/dist/gs/sync/atomic/index.d.ts +4 -0
  155. package/dist/gs/sync/atomic/index.js +5 -0
  156. package/dist/gs/sync/atomic/index.js.map +1 -0
  157. package/dist/gs/sync/atomic/type.gs.d.ts +130 -0
  158. package/dist/gs/sync/atomic/type.gs.js +433 -0
  159. package/dist/gs/sync/atomic/type.gs.js.map +1 -0
  160. package/dist/gs/sync/atomic/value.gs.d.ts +19 -0
  161. package/dist/gs/sync/atomic/value.gs.js +116 -0
  162. package/dist/gs/sync/atomic/value.gs.js.map +1 -0
  163. package/dist/gs/syscall/index.d.ts +80 -0
  164. package/dist/gs/syscall/index.js +163 -0
  165. package/dist/gs/syscall/index.js.map +1 -0
  166. package/dist/gs/unsafe/unsafe.d.ts +1 -0
  167. package/dist/gs/unsafe/unsafe.js +5 -0
  168. package/dist/gs/unsafe/unsafe.js.map +1 -1
  169. package/gs/internal/byteorder/index.ts +40 -0
  170. package/gs/internal/testlog/index.ts +7 -0
  171. package/gs/maps/iter.ts +1 -1
  172. package/gs/math/erfinv.gs.test.ts +2 -2
  173. package/gs/math/fma.gs.test.ts +5 -5
  174. package/gs/math/ldexp.gs.test.ts +5 -5
  175. package/gs/math/lgamma.gs.test.ts +2 -2
  176. package/gs/os/dir.gs.ts +42 -0
  177. package/gs/os/dir_unix.gs.ts +155 -0
  178. package/gs/os/dirent_js.gs.ts +27 -0
  179. package/gs/os/env.gs.ts +179 -0
  180. package/gs/os/error.gs.ts +205 -0
  181. package/gs/os/error_errno.gs.ts +12 -0
  182. package/gs/os/exec.gs.ts +198 -0
  183. package/gs/os/exec_nohandle.gs.ts +2 -0
  184. package/gs/os/exec_posix.gs.ts +95 -0
  185. package/gs/os/exec_unix.gs.ts +64 -0
  186. package/gs/os/executable.gs.ts +18 -0
  187. package/gs/os/executable_js.gs.ts +6 -0
  188. package/gs/os/executable_wasm.gs.ts +10 -0
  189. package/gs/os/file_constants_js.gs.ts +98 -0
  190. package/gs/os/file_js.gs.ts +99 -0
  191. package/gs/os/file_open_unix.gs.ts +15 -0
  192. package/gs/os/file_posix_js.gs.ts +40 -0
  193. package/gs/os/file_unix_js.gs.ts +94 -0
  194. package/gs/os/getwd_js.gs.ts +28 -0
  195. package/gs/os/index.ts +19 -0
  196. package/gs/os/path.gs.ts +35 -0
  197. package/gs/os/path_unix.gs.ts +49 -0
  198. package/gs/os/pidfd_js.gs.ts +25 -0
  199. package/gs/os/pipe_wasm.gs.ts +17 -0
  200. package/gs/os/proc.gs.ts +84 -0
  201. package/gs/os/proc_js.gs.ts +15 -0
  202. package/gs/os/rawconn_js.gs.ts +30 -0
  203. package/gs/os/removeall_js.gs.ts +9 -0
  204. package/gs/os/root_js.gs.ts +111 -0
  205. package/gs/os/root_nonwindows.gs.ts +6 -0
  206. package/gs/os/root_noopenat.gs.ts +45 -0
  207. package/gs/os/stat.gs.ts +38 -0
  208. package/gs/os/stat_js.gs.ts +30 -0
  209. package/gs/os/stat_unix_js.gs.ts +27 -0
  210. package/gs/os/sticky_bsd.gs.ts +4 -0
  211. package/gs/os/sys.gs.ts +12 -0
  212. package/gs/os/sys_bsd.gs.ts +17 -0
  213. package/gs/os/sys_js.gs.ts +9 -0
  214. package/gs/os/tempfile.gs.ts +34 -0
  215. package/gs/os/types.gs.ts +170 -0
  216. package/gs/os/types_js.gs.ts +205 -0
  217. package/gs/os/types_unix.gs.ts +118 -0
  218. package/gs/os/wait_unimp.gs.ts +2 -0
  219. package/gs/os/zero_copy_posix.gs.ts +35 -0
  220. package/gs/os/zero_copy_stub.gs.ts +4 -0
  221. package/gs/sync/atomic/doc.gs.ts +276 -0
  222. package/gs/sync/atomic/doc_64.gs.ts +168 -0
  223. package/gs/sync/atomic/index.ts +4 -0
  224. package/gs/sync/atomic/type.gs.ts +596 -0
  225. package/gs/sync/atomic/value.gs.ts +158 -0
  226. package/gs/syscall/index.ts +204 -0
  227. package/gs/unsafe/unsafe.ts +6 -0
  228. package/package.json +1 -1
@@ -0,0 +1,4 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+
3
+ let supportsCreateWithStickyBit: boolean = false
4
+
@@ -0,0 +1,12 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+ import { hostname } from "./sys_js.gs.js";
3
+
4
+ // Hostname returns the host name reported by the kernel.
5
+ export function Hostname(): [string, $.GoError] {
6
+ let name: string = ""
7
+ let err: $.GoError = null
8
+ {
9
+ return hostname()
10
+ }
11
+ }
12
+
@@ -0,0 +1,17 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+ import { NewSyscallError } from "./error.gs.js";
3
+
4
+ import * as syscall from "@goscript/syscall/index.js"
5
+
6
+ export function hostname(): [string, $.GoError] {
7
+ let name: string = ""
8
+ let err: $.GoError = null
9
+ {
10
+ ;[name, err] = syscall.Sysctl("kern.hostname")
11
+ if (err != null) {
12
+ return ["", NewSyscallError("sysctl kern.hostname", err)]
13
+ }
14
+ return [name, null]
15
+ }
16
+ }
17
+
@@ -0,0 +1,9 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+
3
+ let supportsCloseOnExec: boolean = false
4
+
5
+ // hostname function for JavaScript environment - return mock data
6
+ export function hostname(): [string, $.GoError] {
7
+ return ["goscript", null]
8
+ }
9
+
@@ -0,0 +1,34 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+ import { ErrUnimplemented } from "./error.gs.js";
3
+ import { File } from "./types.gs.js";
4
+
5
+ // joinPath joins directory and file paths - simplified implementation for JavaScript
6
+ export function joinPath(dir: string, file: string): string {
7
+ if (dir === "" || dir === ".") {
8
+ return file
9
+ }
10
+ if (file === "") {
11
+ return dir
12
+ }
13
+ // Remove trailing slash from dir if present
14
+ if (dir.endsWith("/")) {
15
+ dir = dir.slice(0, -1)
16
+ }
17
+ // Remove leading slash from file if present
18
+ if (file.startsWith("/")) {
19
+ file = file.slice(1)
20
+ }
21
+ return dir + "/" + file
22
+ }
23
+
24
+ // CreateTemp creates a new temporary file in the directory dir.
25
+ // Stubbed implementation for JavaScript environment.
26
+ export function CreateTemp(dir: string, pattern: string): [File | null, $.GoError] {
27
+ return [null, ErrUnimplemented]
28
+ }
29
+
30
+ // MkdirTemp creates a new temporary directory.
31
+ // Stubbed implementation for JavaScript environment.
32
+ export function MkdirTemp(dir: string, pattern: string): [string, $.GoError] {
33
+ return ["", ErrUnimplemented]
34
+ }
@@ -0,0 +1,170 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+ import { ErrUnimplemented, ErrInvalid } from "./error.gs.js";
3
+
4
+ import * as fs from "@goscript/io/fs/index.js"
5
+ import * as io from "@goscript/io/index.js"
6
+ import * as time from "@goscript/time/index.js"
7
+ import * as syscall from "@goscript/syscall/index.js"
8
+
9
+ // Re-export essential types
10
+ export type Time = time.Time;
11
+ export type FileInfo = fs.FileInfo;
12
+ export type FileMode = fs.FileMode;
13
+ export type DirEntry = fs.DirEntry;
14
+
15
+ // Getpagesize returns the underlying system's memory page size.
16
+ export function Getpagesize(): number {
17
+ // Return a standard page size for JavaScript environment
18
+ // Most systems use 4096 bytes as the default page size
19
+ return 4096
20
+ }
21
+
22
+ // Simplified File implementation for JavaScript environment
23
+ export class File {
24
+ public name: string = ""
25
+ public closed: boolean = false
26
+
27
+ constructor(init?: Partial<{name?: string}>) {
28
+ this.name = init?.name ?? ""
29
+ }
30
+
31
+ public clone(): File {
32
+ return new File({name: this.name})
33
+ }
34
+
35
+ // All File methods return ErrUnimplemented in JavaScript environment
36
+ public Readdir(n: number): [$.Slice<FileInfo>, $.GoError] {
37
+ return [null, ErrUnimplemented]
38
+ }
39
+
40
+ public Readdirnames(n: number): [$.Slice<string>, $.GoError] {
41
+ return [null, ErrUnimplemented]
42
+ }
43
+
44
+ public ReadDir(n: number): [$.Slice<DirEntry>, $.GoError] {
45
+ return [null, ErrUnimplemented]
46
+ }
47
+
48
+ public Name(): string {
49
+ return this.name
50
+ }
51
+
52
+ public Read(b: $.Bytes): [number, $.GoError] {
53
+ return [0, ErrUnimplemented]
54
+ }
55
+
56
+ public ReadAt(b: $.Bytes, off: number): [number, $.GoError] {
57
+ return [0, ErrUnimplemented]
58
+ }
59
+
60
+ public ReadFrom(r: io.Reader): [number, $.GoError] {
61
+ return [0, ErrUnimplemented]
62
+ }
63
+
64
+ public Write(b: $.Bytes): [number, $.GoError] {
65
+ return [0, ErrUnimplemented]
66
+ }
67
+
68
+ public WriteAt(b: $.Bytes, off: number): [number, $.GoError] {
69
+ return [0, ErrUnimplemented]
70
+ }
71
+
72
+ public WriteTo(w: io.Writer): [number, $.GoError] {
73
+ return [0, ErrUnimplemented]
74
+ }
75
+
76
+ public Seek(offset: number, whence: number): [number, $.GoError] {
77
+ return [0, ErrUnimplemented]
78
+ }
79
+
80
+ public WriteString(s: string): [number, $.GoError] {
81
+ return [0, ErrUnimplemented]
82
+ }
83
+
84
+ public Chmod(mode: number): $.GoError {
85
+ return ErrUnimplemented
86
+ }
87
+
88
+ public SetDeadline(t: Time): $.GoError {
89
+ return ErrUnimplemented
90
+ }
91
+
92
+ public SetReadDeadline(t: Time): $.GoError {
93
+ return ErrUnimplemented
94
+ }
95
+
96
+ public SetWriteDeadline(t: Time): $.GoError {
97
+ return ErrUnimplemented
98
+ }
99
+
100
+ public SyscallConn(): [syscall.RawConn, $.GoError] {
101
+ return [new syscall.StubRawConn(), ErrUnimplemented]
102
+ }
103
+
104
+ public Close(): $.GoError {
105
+ this.closed = true
106
+ return null
107
+ }
108
+
109
+ public Chown(uid: number, gid: number): $.GoError {
110
+ return ErrUnimplemented
111
+ }
112
+
113
+ public Truncate(size: number): $.GoError {
114
+ return ErrUnimplemented
115
+ }
116
+
117
+ public Sync(): $.GoError {
118
+ return ErrUnimplemented
119
+ }
120
+
121
+ public Chdir(): $.GoError {
122
+ return ErrUnimplemented
123
+ }
124
+
125
+ public Fd(): syscall.uintptr {
126
+ return 0
127
+ }
128
+
129
+ public Stat(): [FileInfo, $.GoError] {
130
+ return [null, ErrUnimplemented]
131
+ }
132
+
133
+ // Register this type with the runtime type system
134
+ static __typeInfo = $.registerStructType(
135
+ 'File',
136
+ new File(),
137
+ [
138
+ { name: "Readdir", args: [{ name: "n", type: { kind: $.TypeKind.Basic, name: "number" } }], returns: [{ type: { kind: $.TypeKind.Slice, elemType: "FileInfo" } }, { type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] },
139
+ { name: "Read", args: [{ name: "b", type: { kind: $.TypeKind.Slice, elemType: { kind: $.TypeKind.Basic, name: "number" } } }], returns: [{ type: { kind: $.TypeKind.Basic, name: "number" } }, { type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] },
140
+ { name: "Close", args: [], returns: [{ type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] }
141
+ ],
142
+ File,
143
+ { "name": { kind: $.TypeKind.Basic, name: "string" }, "closed": { kind: $.TypeKind.Basic, name: "boolean" } }
144
+ );
145
+ }
146
+
147
+ // File mode constants
148
+ export let ModeDir: FileMode = fs.ModeDir
149
+ export let ModeAppend: FileMode = fs.ModeAppend
150
+ export let ModeExclusive: FileMode = fs.ModeExclusive
151
+ export let ModeTemporary: FileMode = fs.ModeTemporary
152
+ export let ModeSymlink: FileMode = fs.ModeSymlink
153
+ export let ModeDevice: FileMode = fs.ModeDevice
154
+ export let ModeNamedPipe: FileMode = fs.ModeNamedPipe
155
+ export let ModeSocket: FileMode = fs.ModeSocket
156
+ export let ModeSetuid: FileMode = fs.ModeSetuid
157
+ export let ModeSetgid: FileMode = fs.ModeSetgid
158
+ export let ModeCharDevice: FileMode = fs.ModeCharDevice
159
+ export let ModeSticky: FileMode = fs.ModeSticky
160
+ export let ModeIrregular: FileMode = fs.ModeIrregular
161
+
162
+ export let ModeType: FileMode = fs.ModeType
163
+ export let ModePerm: FileMode = fs.ModePerm
164
+
165
+ // SameFile reports whether fi1 and fi2 describe the same file.
166
+ export function SameFile(fi1: FileInfo, fi2: FileInfo): boolean {
167
+ // In JavaScript environment, always return false as we can't compare files
168
+ return false
169
+ }
170
+
@@ -0,0 +1,205 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+ import { ErrUnimplemented } from "./error.gs.js";
3
+
4
+ import * as fs from "@goscript/io/fs/index.js"
5
+ import * as io from "@goscript/io/index.js"
6
+ import * as time from "@goscript/time/index.js"
7
+ import * as syscall from "@goscript/syscall/index.js"
8
+
9
+ // Re-export essential types
10
+ export type Time = time.Time;
11
+ export type FileInfo = fs.FileInfo;
12
+ export type FileMode = fs.FileMode;
13
+ export type DirEntry = fs.DirEntry;
14
+
15
+ // Export runtime values for ES module compatibility
16
+ export const Time = null as any;
17
+ export const FileInfo = null as any;
18
+ export const FileMode = null as any;
19
+ export const DirEntry = null as any;
20
+
21
+ // Getpagesize returns the underlying system's memory page size.
22
+ export function Getpagesize(): number {
23
+ // Return a standard page size for JavaScript environment
24
+ // Most systems use 4096 bytes as the default page size
25
+ return 4096
26
+ }
27
+
28
+ // Stub implementation of File for JavaScript environment
29
+ export class File {
30
+ public get file(): file | null {
31
+ return null
32
+ }
33
+ public set file(value: file | null) {
34
+ // No-op
35
+ }
36
+
37
+ public _fields: {
38
+ file: $.VarRef<file | null>;
39
+ }
40
+
41
+ constructor(init?: Partial<{file?: file | null}>) {
42
+ this._fields = {
43
+ file: $.varRef(null)
44
+ }
45
+ }
46
+
47
+ public clone(): File {
48
+ return new File()
49
+ }
50
+
51
+ // All File methods return ErrUnimplemented in JavaScript environment
52
+ public Readdir(n: number): [$.Slice<fs.FileInfo>, $.GoError] {
53
+ return [null, ErrUnimplemented]
54
+ }
55
+
56
+ public Readdirnames(n: number): [$.Slice<string>, $.GoError] {
57
+ return [null, ErrUnimplemented]
58
+ }
59
+
60
+ public ReadDir(n: number): [$.Slice<fs.DirEntry>, $.GoError] {
61
+ return [null, ErrUnimplemented]
62
+ }
63
+
64
+ public readdir(n: number, mode: readdirMode): [$.Slice<string>, $.Slice<fs.DirEntry>, $.Slice<fs.FileInfo>, $.GoError] {
65
+ return [null, null, null, ErrUnimplemented]
66
+ }
67
+
68
+ public Name(): string {
69
+ return ""
70
+ }
71
+
72
+ public Read(b: $.Bytes): [number, $.GoError] {
73
+ return [0, ErrUnimplemented]
74
+ }
75
+
76
+ public ReadAt(b: $.Bytes, off: number): [number, $.GoError] {
77
+ return [0, ErrUnimplemented]
78
+ }
79
+
80
+ public ReadFrom(r: io.Reader): [number, $.GoError] {
81
+ return [0, ErrUnimplemented]
82
+ }
83
+
84
+ public Write(b: $.Bytes): [number, $.GoError] {
85
+ return [0, ErrUnimplemented]
86
+ }
87
+
88
+ public WriteAt(b: $.Bytes, off: number): [number, $.GoError] {
89
+ return [0, ErrUnimplemented]
90
+ }
91
+
92
+ public WriteTo(w: io.Writer): [number, $.GoError] {
93
+ return [0, ErrUnimplemented]
94
+ }
95
+
96
+ public Seek(offset: number, whence: number): [number, $.GoError] {
97
+ return [0, ErrUnimplemented]
98
+ }
99
+
100
+ public WriteString(s: string): [number, $.GoError] {
101
+ return [0, ErrUnimplemented]
102
+ }
103
+
104
+ public Chmod(mode: number): $.GoError {
105
+ return ErrUnimplemented
106
+ }
107
+
108
+ public SetDeadline(t: time.Time): $.GoError {
109
+ return ErrUnimplemented
110
+ }
111
+
112
+ public SetReadDeadline(t: time.Time): $.GoError {
113
+ return ErrUnimplemented
114
+ }
115
+
116
+ public SetWriteDeadline(t: time.Time): $.GoError {
117
+ return ErrUnimplemented
118
+ }
119
+
120
+ public SyscallConn(): [any, $.GoError] {
121
+ return [null, ErrUnimplemented]
122
+ }
123
+
124
+ public Close(): $.GoError {
125
+ return ErrUnimplemented
126
+ }
127
+
128
+ public Chown(uid: number, gid: number): $.GoError {
129
+ return ErrUnimplemented
130
+ }
131
+
132
+ public Truncate(size: number): $.GoError {
133
+ return ErrUnimplemented
134
+ }
135
+
136
+ public Sync(): $.GoError {
137
+ return ErrUnimplemented
138
+ }
139
+
140
+ public Chdir(): $.GoError {
141
+ return ErrUnimplemented
142
+ }
143
+
144
+ public Fd(): syscall.uintptr {
145
+ return 0
146
+ }
147
+
148
+ public Stat(): [fs.FileInfo, $.GoError] {
149
+ return [null, ErrUnimplemented]
150
+ }
151
+
152
+ // Internal methods
153
+ public checkValid(op: string): $.GoError {
154
+ return ErrUnimplemented
155
+ }
156
+
157
+ public wrapErr(op: string, err: $.GoError): $.GoError {
158
+ return err
159
+ }
160
+
161
+ // Register this type with the runtime type system
162
+ static __typeInfo = $.registerStructType(
163
+ 'File',
164
+ new File(),
165
+ [
166
+ { name: "Readdir", args: [{ name: "n", type: { kind: $.TypeKind.Basic, name: "number" } }], returns: [{ type: { kind: $.TypeKind.Slice, elemType: "FileInfo" } }, { type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] },
167
+ { name: "Read", args: [{ name: "b", type: { kind: $.TypeKind.Slice, elemType: { kind: $.TypeKind.Basic, name: "number" } } }], returns: [{ type: { kind: $.TypeKind.Basic, name: "number" } }, { type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] },
168
+ { name: "Close", args: [], returns: [{ type: { kind: $.TypeKind.Interface, name: 'GoError', methods: [{ name: 'Error', args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }] }] } }] }
169
+ ],
170
+ File,
171
+ { "file": { kind: $.TypeKind.Pointer, elemType: "file" } }
172
+ );
173
+ }
174
+
175
+ // Stub file type for internal use
176
+ class file {
177
+ constructor() {}
178
+ }
179
+
180
+ // Stub readdirMode type
181
+ type readdirMode = number
182
+
183
+ // File mode constants
184
+ export let ModeDir: fs.FileMode = fs.ModeDir
185
+ export let ModeAppend: fs.FileMode = fs.ModeAppend
186
+ export let ModeExclusive: fs.FileMode = fs.ModeExclusive
187
+ export let ModeTemporary: fs.FileMode = fs.ModeTemporary
188
+ export let ModeSymlink: fs.FileMode = fs.ModeSymlink
189
+ export let ModeDevice: fs.FileMode = fs.ModeDevice
190
+ export let ModeNamedPipe: fs.FileMode = fs.ModeNamedPipe
191
+ export let ModeSocket: fs.FileMode = fs.ModeSocket
192
+ export let ModeSetuid: fs.FileMode = fs.ModeSetuid
193
+ export let ModeSetgid: fs.FileMode = fs.ModeSetgid
194
+ export let ModeCharDevice: fs.FileMode = fs.ModeCharDevice
195
+ export let ModeSticky: fs.FileMode = fs.ModeSticky
196
+ export let ModeIrregular: fs.FileMode = fs.ModeIrregular
197
+
198
+ export let ModeType: fs.FileMode = fs.ModeType
199
+ export let ModePerm: fs.FileMode = fs.ModePerm
200
+
201
+ // SameFile reports whether fi1 and fi2 describe the same file.
202
+ export function SameFile(fi1: fs.FileInfo, fi2: fs.FileInfo): boolean {
203
+ // In JavaScript environment, always return false as we can't compare files
204
+ return false
205
+ }
@@ -0,0 +1,118 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+
3
+ import * as fs from "@goscript/io/fs/index.js"
4
+
5
+ import * as syscall from "@goscript/syscall/index.js"
6
+
7
+ import * as time from "@goscript/time/index.js"
8
+
9
+ class fileStat {
10
+ public get name(): string {
11
+ return this._fields.name.value
12
+ }
13
+ public set name(value: string) {
14
+ this._fields.name.value = value
15
+ }
16
+
17
+ public get size(): number {
18
+ return this._fields.size.value
19
+ }
20
+ public set size(value: number) {
21
+ this._fields.size.value = value
22
+ }
23
+
24
+ public get mode(): fs.FileMode {
25
+ return this._fields.mode.value
26
+ }
27
+ public set mode(value: fs.FileMode) {
28
+ this._fields.mode.value = value
29
+ }
30
+
31
+ public get modTime(): time.Time {
32
+ return this._fields.modTime.value
33
+ }
34
+ public set modTime(value: time.Time) {
35
+ this._fields.modTime.value = value
36
+ }
37
+
38
+ public get sys(): syscall.Stat_t {
39
+ return this._fields.sys.value
40
+ }
41
+ public set sys(value: syscall.Stat_t) {
42
+ this._fields.sys.value = value
43
+ }
44
+
45
+ public _fields: {
46
+ name: $.VarRef<string>;
47
+ size: $.VarRef<number>;
48
+ mode: $.VarRef<fs.FileMode>;
49
+ modTime: $.VarRef<time.Time>;
50
+ sys: $.VarRef<syscall.Stat_t>;
51
+ }
52
+
53
+ constructor(init?: Partial<{modTime?: time.Time, mode?: fs.FileMode, name?: string, size?: number, sys?: syscall.Stat_t}>) {
54
+ this._fields = {
55
+ name: $.varRef(init?.name ?? ""),
56
+ size: $.varRef(init?.size ?? 0),
57
+ mode: $.varRef(init?.mode ?? 0),
58
+ modTime: $.varRef(init?.modTime?.clone() ?? time.Now()),
59
+ sys: $.varRef(init?.sys?.clone() ?? new syscall.Stat_t())
60
+ }
61
+ }
62
+
63
+ public clone(): fileStat {
64
+ const cloned = new fileStat()
65
+ cloned._fields = {
66
+ name: $.varRef(this._fields.name.value),
67
+ size: $.varRef(this._fields.size.value),
68
+ mode: $.varRef(this._fields.mode.value),
69
+ modTime: $.varRef(this._fields.modTime.value?.clone() ?? null),
70
+ sys: $.varRef(this._fields.sys.value?.clone() ?? null)
71
+ }
72
+ return cloned
73
+ }
74
+
75
+ public Name(): string {
76
+ const fs = this
77
+ return fs!.name
78
+ }
79
+
80
+ public IsDir(): boolean {
81
+ const fileStat = this
82
+ return (fileStat!.Mode() & fs.ModeDir) !== 0
83
+ }
84
+
85
+ public Size(): number {
86
+ const fs = this
87
+ return fs!.size
88
+ }
89
+
90
+ public Mode(): fs.FileMode {
91
+ const fileStat = this
92
+ return fileStat!.mode
93
+ }
94
+
95
+ public ModTime(): time.Time {
96
+ const fs = this
97
+ return fs!.modTime
98
+ }
99
+
100
+ public Sys(): null | any {
101
+ const fs = this
102
+ return fs!.sys
103
+ }
104
+
105
+ // Register this type with the runtime type system
106
+ static __typeInfo = $.registerStructType(
107
+ 'fileStat',
108
+ new fileStat(),
109
+ [{ name: "Name", args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: "string" } }] }, { name: "IsDir", args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: "boolean" } }] }, { name: "Size", args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: "number" } }] }, { name: "Mode", args: [], returns: [{ type: { kind: $.TypeKind.Basic, name: "number" } }] }, { name: "ModTime", args: [], returns: [{ type: "Time" }] }, { name: "Sys", args: [], returns: [{ type: { kind: $.TypeKind.Interface, methods: [] } }] }],
110
+ fileStat,
111
+ {"name": { kind: $.TypeKind.Basic, name: "string" }, "size": { kind: $.TypeKind.Basic, name: "number" }, "mode": { kind: $.TypeKind.Basic, name: "number" }, "modTime": "Time", "sys": "Stat_t"}
112
+ );
113
+ }
114
+
115
+ export function sameFile(fs1: fileStat | null, fs2: fileStat | null): boolean {
116
+ return fs1!.sys.Dev == fs2!.sys.Dev && fs1!.sys.Ino == fs2!.sys.Ino
117
+ }
118
+
@@ -0,0 +1,2 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+
@@ -0,0 +1,35 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+ import { NewSyscallError } from "./error.gs.js";
3
+
4
+ import * as io from "@goscript/io/index.js"
5
+
6
+ import * as syscall from "@goscript/syscall/index.js"
7
+
8
+ // wrapSyscallError takes an error and a syscall name. If the error is
9
+ // a syscall.Errno, it wraps it in an os.SyscallError using the syscall name.
10
+ export function wrapSyscallError(name: string, err: $.GoError): $.GoError {
11
+ {
12
+ let { ok: ok } = $.typeAssert<syscall.Errno>(err, 'syscall.Errno')
13
+ if (ok) {
14
+ err = NewSyscallError(name, err)
15
+ }
16
+ }
17
+ return err
18
+ }
19
+
20
+ // tryLimitedReader tries to assert the io.Reader to io.LimitedReader, it returns the io.LimitedReader,
21
+ // the underlying io.Reader and the remaining amount of bytes if the assertion succeeds,
22
+ // otherwise it just returns the original io.Reader and the theoretical unlimited remaining amount of bytes.
23
+ export function tryLimitedReader(r: io.Reader): [io.LimitedReader | null, io.Reader, number] {
24
+ // by default, copy until EOF
25
+ let remain: number = Number.MAX_SAFE_INTEGER - 1
26
+
27
+ let { value: lr, ok: ok } = $.typeAssert<io.LimitedReader | null>(r, {kind: $.TypeKind.Pointer, elemType: 'io.LimitedReader'})
28
+ if (!ok) {
29
+ return [null, r, remain]
30
+ }
31
+
32
+ remain = lr!.N
33
+ return [lr, lr!.R, remain]
34
+ }
35
+
@@ -0,0 +1,4 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+
3
+ import * as io from "@goscript/io/index.js"
4
+