goscript 0.0.36 → 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 (196) hide show
  1. package/compiler/expr-call.go +26 -0
  2. package/compiler/spec.go +1 -1
  3. package/compiler/stmt.go +26 -8
  4. package/dist/gs/internal/byteorder/index.d.ts +8 -0
  5. package/dist/gs/internal/byteorder/index.js +34 -0
  6. package/dist/gs/internal/byteorder/index.js.map +1 -0
  7. package/dist/gs/internal/testlog/index.d.ts +1 -0
  8. package/dist/gs/internal/testlog/index.js +5 -0
  9. package/dist/gs/internal/testlog/index.js.map +1 -0
  10. package/dist/gs/os/dir.gs.d.ts +6 -0
  11. package/dist/gs/os/dir.gs.js +35 -0
  12. package/dist/gs/os/dir.gs.js.map +1 -0
  13. package/dist/gs/os/dir_unix.gs.d.ts +7 -0
  14. package/dist/gs/os/dir_unix.gs.js +113 -0
  15. package/dist/gs/os/dir_unix.gs.js.map +1 -0
  16. package/dist/gs/os/dirent_js.gs.d.ts +5 -0
  17. package/dist/gs/os/dirent_js.gs.js +20 -0
  18. package/dist/gs/os/dirent_js.gs.js.map +1 -0
  19. package/dist/gs/os/env.gs.d.ts +12 -0
  20. package/dist/gs/os/env.gs.js +157 -0
  21. package/dist/gs/os/env.gs.js.map +1 -0
  22. package/dist/gs/os/error.gs.d.ts +40 -0
  23. package/dist/gs/os/error.gs.js +158 -0
  24. package/dist/gs/os/error.gs.js.map +1 -0
  25. package/dist/gs/os/error_errno.gs.d.ts +1 -0
  26. package/dist/gs/os/error_errno.gs.js +5 -0
  27. package/dist/gs/os/error_errno.gs.js.map +1 -0
  28. package/dist/gs/os/exec.gs.d.ts +60 -0
  29. package/dist/gs/os/exec.gs.js +136 -0
  30. package/dist/gs/os/exec.gs.js.map +1 -0
  31. package/dist/gs/os/exec_nohandle.gs.d.ts +1 -0
  32. package/dist/gs/os/exec_nohandle.gs.js +2 -0
  33. package/dist/gs/os/exec_nohandle.gs.js.map +1 -0
  34. package/dist/gs/os/exec_posix.gs.d.ts +25 -0
  35. package/dist/gs/os/exec_posix.gs.js +67 -0
  36. package/dist/gs/os/exec_posix.gs.js.map +1 -0
  37. package/dist/gs/os/exec_unix.gs.d.ts +4 -0
  38. package/dist/gs/os/exec_unix.gs.js +46 -0
  39. package/dist/gs/os/exec_unix.gs.js.map +1 -0
  40. package/dist/gs/os/executable.gs.d.ts +2 -0
  41. package/dist/gs/os/executable.gs.js +16 -0
  42. package/dist/gs/os/executable.gs.js.map +1 -0
  43. package/dist/gs/os/executable_js.gs.d.ts +2 -0
  44. package/dist/gs/os/executable_js.gs.js +5 -0
  45. package/dist/gs/os/executable_js.gs.js.map +1 -0
  46. package/dist/gs/os/executable_wasm.gs.d.ts +2 -0
  47. package/dist/gs/os/executable_wasm.gs.js +6 -0
  48. package/dist/gs/os/executable_wasm.gs.js.map +1 -0
  49. package/dist/gs/os/file_constants_js.gs.d.ts +41 -0
  50. package/dist/gs/os/file_constants_js.gs.js +78 -0
  51. package/dist/gs/os/file_constants_js.gs.js.map +1 -0
  52. package/dist/gs/os/file_js.gs.d.ts +22 -0
  53. package/dist/gs/os/file_js.gs.js +73 -0
  54. package/dist/gs/os/file_js.gs.js.map +1 -0
  55. package/dist/gs/os/file_open_unix.gs.d.ts +6 -0
  56. package/dist/gs/os/file_open_unix.gs.js +10 -0
  57. package/dist/gs/os/file_open_unix.gs.js.map +1 -0
  58. package/dist/gs/os/file_posix_js.gs.d.ts +8 -0
  59. package/dist/gs/os/file_posix_js.gs.js +32 -0
  60. package/dist/gs/os/file_posix_js.gs.js.map +1 -0
  61. package/dist/gs/os/file_unix_js.gs.d.ts +27 -0
  62. package/dist/gs/os/file_unix_js.gs.js +64 -0
  63. package/dist/gs/os/file_unix_js.gs.js.map +1 -0
  64. package/dist/gs/os/getwd_js.gs.d.ts +6 -0
  65. package/dist/gs/os/getwd_js.gs.js +21 -0
  66. package/dist/gs/os/getwd_js.gs.js.map +1 -0
  67. package/dist/gs/os/index.d.ts +19 -0
  68. package/dist/gs/os/index.js +20 -0
  69. package/dist/gs/os/index.js.map +1 -0
  70. package/dist/gs/os/path.gs.d.ts +4 -0
  71. package/dist/gs/os/path.gs.js +32 -0
  72. package/dist/gs/os/path.gs.js.map +1 -0
  73. package/dist/gs/os/path_unix.gs.d.ts +4 -0
  74. package/dist/gs/os/path_unix.gs.js +40 -0
  75. package/dist/gs/os/path_unix.gs.js.map +1 -0
  76. package/dist/gs/os/pidfd_js.gs.d.ts +6 -0
  77. package/dist/gs/os/pidfd_js.gs.js +14 -0
  78. package/dist/gs/os/pidfd_js.gs.js.map +1 -0
  79. package/dist/gs/os/pipe_wasm.gs.d.ts +2 -0
  80. package/dist/gs/os/pipe_wasm.gs.js +14 -0
  81. package/dist/gs/os/pipe_wasm.gs.js.map +1 -0
  82. package/dist/gs/os/proc.gs.d.ts +11 -0
  83. package/dist/gs/os/proc.gs.js +68 -0
  84. package/dist/gs/os/proc.gs.js.map +1 -0
  85. package/dist/gs/os/proc_js.gs.d.ts +3 -0
  86. package/dist/gs/os/proc_js.gs.js +12 -0
  87. package/dist/gs/os/proc_js.gs.js.map +1 -0
  88. package/dist/gs/os/rawconn_js.gs.d.ts +10 -0
  89. package/dist/gs/os/rawconn_js.gs.js +26 -0
  90. package/dist/gs/os/rawconn_js.gs.js.map +1 -0
  91. package/dist/gs/os/removeall_js.gs.d.ts +2 -0
  92. package/dist/gs/os/removeall_js.gs.js +7 -0
  93. package/dist/gs/os/removeall_js.gs.js.map +1 -0
  94. package/dist/gs/os/root_js.gs.d.ts +23 -0
  95. package/dist/gs/os/root_js.gs.js +80 -0
  96. package/dist/gs/os/root_js.gs.js.map +1 -0
  97. package/dist/gs/os/root_nonwindows.gs.d.ts +2 -0
  98. package/dist/gs/os/root_nonwindows.gs.js +4 -0
  99. package/dist/gs/os/root_nonwindows.gs.js.map +1 -0
  100. package/dist/gs/os/root_noopenat.gs.d.ts +11 -0
  101. package/dist/gs/os/root_noopenat.gs.js +31 -0
  102. package/dist/gs/os/root_noopenat.gs.js.map +1 -0
  103. package/dist/gs/os/stat.gs.d.ts +24 -0
  104. package/dist/gs/os/stat.gs.js +20 -0
  105. package/dist/gs/os/stat.gs.js.map +1 -0
  106. package/dist/gs/os/stat_js.gs.d.ts +6 -0
  107. package/dist/gs/os/stat_js.gs.js +23 -0
  108. package/dist/gs/os/stat_js.gs.js.map +1 -0
  109. package/dist/gs/os/stat_unix_js.gs.d.ts +8 -0
  110. package/dist/gs/os/stat_unix_js.gs.js +16 -0
  111. package/dist/gs/os/stat_unix_js.gs.js.map +1 -0
  112. package/dist/gs/os/sticky_bsd.gs.d.ts +1 -0
  113. package/dist/gs/os/sticky_bsd.gs.js +3 -0
  114. package/dist/gs/os/sticky_bsd.gs.js.map +1 -0
  115. package/dist/gs/os/sys.gs.d.ts +2 -0
  116. package/dist/gs/os/sys.gs.js +10 -0
  117. package/dist/gs/os/sys.gs.js.map +1 -0
  118. package/dist/gs/os/sys_bsd.gs.d.ts +2 -0
  119. package/dist/gs/os/sys_bsd.gs.js +15 -0
  120. package/dist/gs/os/sys_bsd.gs.js.map +1 -0
  121. package/dist/gs/os/sys_js.gs.d.ts +2 -0
  122. package/dist/gs/os/sys_js.gs.js +6 -0
  123. package/dist/gs/os/sys_js.gs.js.map +1 -0
  124. package/dist/gs/os/tempfile.gs.d.ts +5 -0
  125. package/dist/gs/os/tempfile.gs.js +30 -0
  126. package/dist/gs/os/tempfile.gs.js.map +1 -0
  127. package/dist/gs/os/types.gs.d.ts +59 -0
  128. package/dist/gs/os/types.gs.js +123 -0
  129. package/dist/gs/os/types.gs.js.map +1 -0
  130. package/dist/gs/os/types_js.gs.d.ts +74 -0
  131. package/dist/gs/os/types_js.gs.js +147 -0
  132. package/dist/gs/os/types_js.gs.js.map +1 -0
  133. package/dist/gs/os/types_unix.gs.d.ts +40 -0
  134. package/dist/gs/os/types_unix.gs.js +87 -0
  135. package/dist/gs/os/types_unix.gs.js.map +1 -0
  136. package/dist/gs/os/wait_unimp.gs.d.ts +1 -0
  137. package/dist/gs/os/wait_unimp.gs.js +2 -0
  138. package/dist/gs/os/wait_unimp.gs.js.map +1 -0
  139. package/dist/gs/os/zero_copy_posix.gs.d.ts +4 -0
  140. package/dist/gs/os/zero_copy_posix.gs.js +27 -0
  141. package/dist/gs/os/zero_copy_posix.gs.js.map +1 -0
  142. package/dist/gs/os/zero_copy_stub.gs.d.ts +1 -0
  143. package/dist/gs/os/zero_copy_stub.gs.js +2 -0
  144. package/dist/gs/os/zero_copy_stub.gs.js.map +1 -0
  145. package/dist/gs/syscall/index.d.ts +80 -0
  146. package/dist/gs/syscall/index.js +163 -0
  147. package/dist/gs/syscall/index.js.map +1 -0
  148. package/gs/internal/byteorder/index.ts +40 -0
  149. package/gs/internal/testlog/index.ts +7 -0
  150. package/gs/os/dir.gs.ts +42 -0
  151. package/gs/os/dir_unix.gs.ts +155 -0
  152. package/gs/os/dirent_js.gs.ts +27 -0
  153. package/gs/os/env.gs.ts +179 -0
  154. package/gs/os/error.gs.ts +205 -0
  155. package/gs/os/error_errno.gs.ts +12 -0
  156. package/gs/os/exec.gs.ts +198 -0
  157. package/gs/os/exec_nohandle.gs.ts +2 -0
  158. package/gs/os/exec_posix.gs.ts +95 -0
  159. package/gs/os/exec_unix.gs.ts +64 -0
  160. package/gs/os/executable.gs.ts +18 -0
  161. package/gs/os/executable_js.gs.ts +6 -0
  162. package/gs/os/executable_wasm.gs.ts +10 -0
  163. package/gs/os/file_constants_js.gs.ts +98 -0
  164. package/gs/os/file_js.gs.ts +99 -0
  165. package/gs/os/file_open_unix.gs.ts +15 -0
  166. package/gs/os/file_posix_js.gs.ts +40 -0
  167. package/gs/os/file_unix_js.gs.ts +94 -0
  168. package/gs/os/getwd_js.gs.ts +28 -0
  169. package/gs/os/index.ts +19 -0
  170. package/gs/os/path.gs.ts +35 -0
  171. package/gs/os/path_unix.gs.ts +49 -0
  172. package/gs/os/pidfd_js.gs.ts +25 -0
  173. package/gs/os/pipe_wasm.gs.ts +17 -0
  174. package/gs/os/proc.gs.ts +84 -0
  175. package/gs/os/proc_js.gs.ts +15 -0
  176. package/gs/os/rawconn_js.gs.ts +30 -0
  177. package/gs/os/removeall_js.gs.ts +9 -0
  178. package/gs/os/root_js.gs.ts +111 -0
  179. package/gs/os/root_nonwindows.gs.ts +6 -0
  180. package/gs/os/root_noopenat.gs.ts +45 -0
  181. package/gs/os/stat.gs.ts +38 -0
  182. package/gs/os/stat_js.gs.ts +30 -0
  183. package/gs/os/stat_unix_js.gs.ts +27 -0
  184. package/gs/os/sticky_bsd.gs.ts +4 -0
  185. package/gs/os/sys.gs.ts +12 -0
  186. package/gs/os/sys_bsd.gs.ts +17 -0
  187. package/gs/os/sys_js.gs.ts +9 -0
  188. package/gs/os/tempfile.gs.ts +34 -0
  189. package/gs/os/types.gs.ts +170 -0
  190. package/gs/os/types_js.gs.ts +205 -0
  191. package/gs/os/types_unix.gs.ts +118 -0
  192. package/gs/os/wait_unimp.gs.ts +2 -0
  193. package/gs/os/zero_copy_posix.gs.ts +35 -0
  194. package/gs/os/zero_copy_stub.gs.ts +4 -0
  195. package/gs/syscall/index.ts +204 -0
  196. package/package.json +1 -1
@@ -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
+
@@ -0,0 +1,204 @@
1
+ import * as $ from "@goscript/builtin/builtin.js";
2
+
3
+ // Essential type aliases
4
+ export type uintptr = number
5
+
6
+ // Errno type for syscall errors
7
+ export interface Errno {
8
+ Error(): string
9
+ Is(target: $.GoError): boolean
10
+ Errno(): number
11
+ }
12
+
13
+ // Essential syscall constants
14
+ export const O_RDONLY = 0
15
+ export const O_WRONLY = 1
16
+ export const O_RDWR = 2
17
+ export const O_APPEND = 8
18
+ export const O_CREATE = 64
19
+ export const O_EXCL = 128
20
+ export const O_SYNC = 256
21
+ export const O_TRUNC = 512
22
+
23
+ export const Stdin = 0
24
+ export const Stdout = 1
25
+ export const Stderr = 2
26
+
27
+ export const SIGINT = 2
28
+ export const SIGTERM = 15
29
+
30
+ // File mode constants
31
+ export const S_IFMT = 0o170000
32
+ export const S_IFREG = 0o100000
33
+ export const S_IFDIR = 0o040000
34
+ export const S_IFLNK = 0o120000
35
+ export const S_IFBLK = 0o060000
36
+ export const S_IFCHR = 0o020000
37
+ export const S_IFIFO = 0o010000
38
+ export const S_IFSOCK = 0o140000
39
+ export const S_ISUID = 0o004000
40
+ export const S_ISGID = 0o002000
41
+ export const S_ISVTX = 0o001000
42
+
43
+ // Environment variable functions using Node.js/browser APIs
44
+ export function Getenv(key: string): [string, boolean] {
45
+ if (typeof process !== 'undefined' && process.env) {
46
+ const value = process.env[key]
47
+ return value !== undefined ? [value, true] : ["", false]
48
+ }
49
+ return ["", false]
50
+ }
51
+
52
+ export function Setenv(key: string, value: string): $.GoError {
53
+ if (typeof process !== 'undefined' && process.env) {
54
+ process.env[key] = value
55
+ return null
56
+ }
57
+ return { Error: () => "setenv not supported" }
58
+ }
59
+
60
+ export function Unsetenv(key: string): $.GoError {
61
+ if (typeof process !== 'undefined' && process.env) {
62
+ delete process.env[key]
63
+ return null
64
+ }
65
+ return { Error: () => "unsetenv not supported" }
66
+ }
67
+
68
+ export function Clearenv(): void {
69
+ if (typeof process !== 'undefined' && process.env) {
70
+ for (const key in process.env) {
71
+ delete process.env[key]
72
+ }
73
+ }
74
+ }
75
+
76
+ export function Environ(): $.Slice<string> {
77
+ if (typeof process !== 'undefined' && process.env) {
78
+ const env: string[] = []
79
+ for (const [key, value] of Object.entries(process.env)) {
80
+ if (value !== undefined) {
81
+ env.push(`${key}=${value}`)
82
+ }
83
+ }
84
+ return $.arrayToSlice(env)
85
+ }
86
+ return $.arrayToSlice([])
87
+ }
88
+
89
+ // Dirent structure with Reclen field
90
+ export class Dirent {
91
+ public Name: $.Bytes = new Uint8Array(0)
92
+ public Reclen: number = 0
93
+ constructor(init?: any) {
94
+ if (init?.Name) this.Name = init.Name
95
+ if (init?.Reclen) this.Reclen = init.Reclen
96
+ }
97
+ }
98
+
99
+ // Stat_t structure stub
100
+ export class Stat_t {
101
+ public Dev: number = 0
102
+ public Ino: number = 0
103
+ public Mode: number = 0
104
+ public Nlink: number = 0
105
+ public Uid: number = 0
106
+ public Gid: number = 0
107
+ public Rdev: number = 0
108
+ public Size: number = 0
109
+ public Blksize: number = 0
110
+ public Blocks: number = 0
111
+ public Atime: number = 0
112
+ public Mtime: number = 0
113
+ public Ctime: number = 0
114
+ public AtimeNsec: number = 0
115
+ public MtimeNsec: number = 0
116
+ public CtimeNsec: number = 0
117
+
118
+ constructor(init?: any) {
119
+ if (init) {
120
+ Object.assign(this, init)
121
+ }
122
+ }
123
+
124
+ public clone(): Stat_t {
125
+ return new Stat_t(this)
126
+ }
127
+ }
128
+
129
+ // RawConn interface - stub implementation for JavaScript environment
130
+ export interface RawConn {
131
+ Control(f: (fd: uintptr) => void): $.GoError
132
+ Read(f: (fd: uintptr) => boolean): $.GoError
133
+ Write(f: (fd: uintptr) => boolean): $.GoError
134
+ }
135
+
136
+ // Stub implementation of RawConn that always returns ErrUnimplemented
137
+ export class StubRawConn implements RawConn {
138
+ Control(f: (fd: uintptr) => void): $.GoError {
139
+ return { Error: () => "operation not implemented in JavaScript environment" }
140
+ }
141
+
142
+ Read(f: (fd: uintptr) => boolean): $.GoError {
143
+ return { Error: () => "operation not implemented in JavaScript environment" }
144
+ }
145
+
146
+ Write(f: (fd: uintptr) => boolean): $.GoError {
147
+ return { Error: () => "operation not implemented in JavaScript environment" }
148
+ }
149
+ }
150
+
151
+ // Additional error constants - implement as Errno type
152
+ export const ENOSYS: Errno = {
153
+ Error: () => "function not implemented",
154
+ Is: (target: $.GoError) => target === ENOSYS,
155
+ Errno: () => 38
156
+ }
157
+
158
+ export const EISDIR: Errno = {
159
+ Error: () => "is a directory",
160
+ Is: (target: $.GoError) => target === EISDIR,
161
+ Errno: () => 21
162
+ }
163
+
164
+ export const ENOTDIR: Errno = {
165
+ Error: () => "not a directory",
166
+ Is: (target: $.GoError) => target === ENOTDIR,
167
+ Errno: () => 20
168
+ }
169
+
170
+ export const ERANGE: Errno = {
171
+ Error: () => "result too large",
172
+ Is: (target: $.GoError) => target === ERANGE,
173
+ Errno: () => 34
174
+ }
175
+
176
+ export const ENOMEM: Errno = {
177
+ Error: () => "out of memory",
178
+ Is: (target: $.GoError) => target === ENOMEM,
179
+ Errno: () => 12
180
+ }
181
+
182
+ export const ESRCH: Errno = {
183
+ Error: () => "no such process",
184
+ Is: (target: $.GoError) => target === ESRCH,
185
+ Errno: () => 3
186
+ }
187
+
188
+ // Additional missing syscall functions
189
+ export function Open(path: string, flag: number, perm: number): [number, $.GoError] {
190
+ return [-1, ENOSYS]
191
+ }
192
+
193
+ export function Sysctl(name: string): [string, $.GoError] {
194
+ return ["", ENOSYS]
195
+ }
196
+
197
+
198
+
199
+ // Getpagesize returns the underlying system's memory page size.
200
+ export function Getpagesize(): number {
201
+ // Return a standard page size for JavaScript environment
202
+ // Most systems use 4096 bytes as the default page size
203
+ return 4096
204
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "goscript",
3
3
  "description": "Go to TypeScript transpiler",
4
- "version": "0.0.36",
4
+ "version": "0.0.37",
5
5
  "author": {
6
6
  "name": "Aperture Robotics LLC.",
7
7
  "email": "support@aperture.us",