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.
- package/compiler/expr-call.go +26 -0
- package/compiler/spec-struct.go +41 -8
- package/compiler/spec-value.go +4 -0
- package/compiler/spec.go +1 -1
- package/compiler/stmt.go +26 -8
- package/dist/gs/internal/byteorder/index.d.ts +8 -0
- package/dist/gs/internal/byteorder/index.js +34 -0
- package/dist/gs/internal/byteorder/index.js.map +1 -0
- package/dist/gs/internal/testlog/index.d.ts +1 -0
- package/dist/gs/internal/testlog/index.js +5 -0
- package/dist/gs/internal/testlog/index.js.map +1 -0
- package/dist/gs/maps/iter.d.ts +1 -1
- package/dist/gs/os/dir.gs.d.ts +6 -0
- package/dist/gs/os/dir.gs.js +35 -0
- package/dist/gs/os/dir.gs.js.map +1 -0
- package/dist/gs/os/dir_unix.gs.d.ts +7 -0
- package/dist/gs/os/dir_unix.gs.js +113 -0
- package/dist/gs/os/dir_unix.gs.js.map +1 -0
- package/dist/gs/os/dirent_js.gs.d.ts +5 -0
- package/dist/gs/os/dirent_js.gs.js +20 -0
- package/dist/gs/os/dirent_js.gs.js.map +1 -0
- package/dist/gs/os/env.gs.d.ts +12 -0
- package/dist/gs/os/env.gs.js +157 -0
- package/dist/gs/os/env.gs.js.map +1 -0
- package/dist/gs/os/error.gs.d.ts +40 -0
- package/dist/gs/os/error.gs.js +158 -0
- package/dist/gs/os/error.gs.js.map +1 -0
- package/dist/gs/os/error_errno.gs.d.ts +1 -0
- package/dist/gs/os/error_errno.gs.js +5 -0
- package/dist/gs/os/error_errno.gs.js.map +1 -0
- package/dist/gs/os/exec.gs.d.ts +60 -0
- package/dist/gs/os/exec.gs.js +136 -0
- package/dist/gs/os/exec.gs.js.map +1 -0
- package/dist/gs/os/exec_nohandle.gs.d.ts +1 -0
- package/dist/gs/os/exec_nohandle.gs.js +2 -0
- package/dist/gs/os/exec_nohandle.gs.js.map +1 -0
- package/dist/gs/os/exec_posix.gs.d.ts +25 -0
- package/dist/gs/os/exec_posix.gs.js +67 -0
- package/dist/gs/os/exec_posix.gs.js.map +1 -0
- package/dist/gs/os/exec_unix.gs.d.ts +4 -0
- package/dist/gs/os/exec_unix.gs.js +46 -0
- package/dist/gs/os/exec_unix.gs.js.map +1 -0
- package/dist/gs/os/executable.gs.d.ts +2 -0
- package/dist/gs/os/executable.gs.js +16 -0
- package/dist/gs/os/executable.gs.js.map +1 -0
- package/dist/gs/os/executable_js.gs.d.ts +2 -0
- package/dist/gs/os/executable_js.gs.js +5 -0
- package/dist/gs/os/executable_js.gs.js.map +1 -0
- package/dist/gs/os/executable_wasm.gs.d.ts +2 -0
- package/dist/gs/os/executable_wasm.gs.js +6 -0
- package/dist/gs/os/executable_wasm.gs.js.map +1 -0
- package/dist/gs/os/file_constants_js.gs.d.ts +41 -0
- package/dist/gs/os/file_constants_js.gs.js +78 -0
- package/dist/gs/os/file_constants_js.gs.js.map +1 -0
- package/dist/gs/os/file_js.gs.d.ts +22 -0
- package/dist/gs/os/file_js.gs.js +73 -0
- package/dist/gs/os/file_js.gs.js.map +1 -0
- package/dist/gs/os/file_open_unix.gs.d.ts +6 -0
- package/dist/gs/os/file_open_unix.gs.js +10 -0
- package/dist/gs/os/file_open_unix.gs.js.map +1 -0
- package/dist/gs/os/file_posix_js.gs.d.ts +8 -0
- package/dist/gs/os/file_posix_js.gs.js +32 -0
- package/dist/gs/os/file_posix_js.gs.js.map +1 -0
- package/dist/gs/os/file_unix_js.gs.d.ts +27 -0
- package/dist/gs/os/file_unix_js.gs.js +64 -0
- package/dist/gs/os/file_unix_js.gs.js.map +1 -0
- package/dist/gs/os/getwd_js.gs.d.ts +6 -0
- package/dist/gs/os/getwd_js.gs.js +21 -0
- package/dist/gs/os/getwd_js.gs.js.map +1 -0
- package/dist/gs/os/index.d.ts +19 -0
- package/dist/gs/os/index.js +20 -0
- package/dist/gs/os/index.js.map +1 -0
- package/dist/gs/os/path.gs.d.ts +4 -0
- package/dist/gs/os/path.gs.js +32 -0
- package/dist/gs/os/path.gs.js.map +1 -0
- package/dist/gs/os/path_unix.gs.d.ts +4 -0
- package/dist/gs/os/path_unix.gs.js +40 -0
- package/dist/gs/os/path_unix.gs.js.map +1 -0
- package/dist/gs/os/pidfd_js.gs.d.ts +6 -0
- package/dist/gs/os/pidfd_js.gs.js +14 -0
- package/dist/gs/os/pidfd_js.gs.js.map +1 -0
- package/dist/gs/os/pipe_wasm.gs.d.ts +2 -0
- package/dist/gs/os/pipe_wasm.gs.js +14 -0
- package/dist/gs/os/pipe_wasm.gs.js.map +1 -0
- package/dist/gs/os/proc.gs.d.ts +11 -0
- package/dist/gs/os/proc.gs.js +68 -0
- package/dist/gs/os/proc.gs.js.map +1 -0
- package/dist/gs/os/proc_js.gs.d.ts +3 -0
- package/dist/gs/os/proc_js.gs.js +12 -0
- package/dist/gs/os/proc_js.gs.js.map +1 -0
- package/dist/gs/os/rawconn_js.gs.d.ts +10 -0
- package/dist/gs/os/rawconn_js.gs.js +26 -0
- package/dist/gs/os/rawconn_js.gs.js.map +1 -0
- package/dist/gs/os/removeall_js.gs.d.ts +2 -0
- package/dist/gs/os/removeall_js.gs.js +7 -0
- package/dist/gs/os/removeall_js.gs.js.map +1 -0
- package/dist/gs/os/root_js.gs.d.ts +23 -0
- package/dist/gs/os/root_js.gs.js +80 -0
- package/dist/gs/os/root_js.gs.js.map +1 -0
- package/dist/gs/os/root_nonwindows.gs.d.ts +2 -0
- package/dist/gs/os/root_nonwindows.gs.js +4 -0
- package/dist/gs/os/root_nonwindows.gs.js.map +1 -0
- package/dist/gs/os/root_noopenat.gs.d.ts +11 -0
- package/dist/gs/os/root_noopenat.gs.js +31 -0
- package/dist/gs/os/root_noopenat.gs.js.map +1 -0
- package/dist/gs/os/stat.gs.d.ts +24 -0
- package/dist/gs/os/stat.gs.js +20 -0
- package/dist/gs/os/stat.gs.js.map +1 -0
- package/dist/gs/os/stat_js.gs.d.ts +6 -0
- package/dist/gs/os/stat_js.gs.js +23 -0
- package/dist/gs/os/stat_js.gs.js.map +1 -0
- package/dist/gs/os/stat_unix_js.gs.d.ts +8 -0
- package/dist/gs/os/stat_unix_js.gs.js +16 -0
- package/dist/gs/os/stat_unix_js.gs.js.map +1 -0
- package/dist/gs/os/sticky_bsd.gs.d.ts +1 -0
- package/dist/gs/os/sticky_bsd.gs.js +3 -0
- package/dist/gs/os/sticky_bsd.gs.js.map +1 -0
- package/dist/gs/os/sys.gs.d.ts +2 -0
- package/dist/gs/os/sys.gs.js +10 -0
- package/dist/gs/os/sys.gs.js.map +1 -0
- package/dist/gs/os/sys_bsd.gs.d.ts +2 -0
- package/dist/gs/os/sys_bsd.gs.js +15 -0
- package/dist/gs/os/sys_bsd.gs.js.map +1 -0
- package/dist/gs/os/sys_js.gs.d.ts +2 -0
- package/dist/gs/os/sys_js.gs.js +6 -0
- package/dist/gs/os/sys_js.gs.js.map +1 -0
- package/dist/gs/os/tempfile.gs.d.ts +5 -0
- package/dist/gs/os/tempfile.gs.js +30 -0
- package/dist/gs/os/tempfile.gs.js.map +1 -0
- package/dist/gs/os/types.gs.d.ts +59 -0
- package/dist/gs/os/types.gs.js +123 -0
- package/dist/gs/os/types.gs.js.map +1 -0
- package/dist/gs/os/types_js.gs.d.ts +74 -0
- package/dist/gs/os/types_js.gs.js +147 -0
- package/dist/gs/os/types_js.gs.js.map +1 -0
- package/dist/gs/os/types_unix.gs.d.ts +40 -0
- package/dist/gs/os/types_unix.gs.js +87 -0
- package/dist/gs/os/types_unix.gs.js.map +1 -0
- package/dist/gs/os/wait_unimp.gs.d.ts +1 -0
- package/dist/gs/os/wait_unimp.gs.js +2 -0
- package/dist/gs/os/wait_unimp.gs.js.map +1 -0
- package/dist/gs/os/zero_copy_posix.gs.d.ts +4 -0
- package/dist/gs/os/zero_copy_posix.gs.js +27 -0
- package/dist/gs/os/zero_copy_posix.gs.js.map +1 -0
- package/dist/gs/os/zero_copy_stub.gs.d.ts +1 -0
- package/dist/gs/os/zero_copy_stub.gs.js +2 -0
- package/dist/gs/os/zero_copy_stub.gs.js.map +1 -0
- package/dist/gs/sync/atomic/doc.gs.d.ts +28 -0
- package/dist/gs/sync/atomic/doc.gs.js +265 -0
- package/dist/gs/sync/atomic/doc.gs.js.map +1 -0
- package/dist/gs/sync/atomic/doc_64.gs.d.ts +15 -0
- package/dist/gs/sync/atomic/doc_64.gs.js +165 -0
- package/dist/gs/sync/atomic/doc_64.gs.js.map +1 -0
- package/dist/gs/sync/atomic/index.d.ts +4 -0
- package/dist/gs/sync/atomic/index.js +5 -0
- package/dist/gs/sync/atomic/index.js.map +1 -0
- package/dist/gs/sync/atomic/type.gs.d.ts +130 -0
- package/dist/gs/sync/atomic/type.gs.js +433 -0
- package/dist/gs/sync/atomic/type.gs.js.map +1 -0
- package/dist/gs/sync/atomic/value.gs.d.ts +19 -0
- package/dist/gs/sync/atomic/value.gs.js +116 -0
- package/dist/gs/sync/atomic/value.gs.js.map +1 -0
- package/dist/gs/syscall/index.d.ts +80 -0
- package/dist/gs/syscall/index.js +163 -0
- package/dist/gs/syscall/index.js.map +1 -0
- package/dist/gs/unsafe/unsafe.d.ts +1 -0
- package/dist/gs/unsafe/unsafe.js +5 -0
- package/dist/gs/unsafe/unsafe.js.map +1 -1
- package/gs/internal/byteorder/index.ts +40 -0
- package/gs/internal/testlog/index.ts +7 -0
- package/gs/maps/iter.ts +1 -1
- package/gs/math/erfinv.gs.test.ts +2 -2
- package/gs/math/fma.gs.test.ts +5 -5
- package/gs/math/ldexp.gs.test.ts +5 -5
- package/gs/math/lgamma.gs.test.ts +2 -2
- package/gs/os/dir.gs.ts +42 -0
- package/gs/os/dir_unix.gs.ts +155 -0
- package/gs/os/dirent_js.gs.ts +27 -0
- package/gs/os/env.gs.ts +179 -0
- package/gs/os/error.gs.ts +205 -0
- package/gs/os/error_errno.gs.ts +12 -0
- package/gs/os/exec.gs.ts +198 -0
- package/gs/os/exec_nohandle.gs.ts +2 -0
- package/gs/os/exec_posix.gs.ts +95 -0
- package/gs/os/exec_unix.gs.ts +64 -0
- package/gs/os/executable.gs.ts +18 -0
- package/gs/os/executable_js.gs.ts +6 -0
- package/gs/os/executable_wasm.gs.ts +10 -0
- package/gs/os/file_constants_js.gs.ts +98 -0
- package/gs/os/file_js.gs.ts +99 -0
- package/gs/os/file_open_unix.gs.ts +15 -0
- package/gs/os/file_posix_js.gs.ts +40 -0
- package/gs/os/file_unix_js.gs.ts +94 -0
- package/gs/os/getwd_js.gs.ts +28 -0
- package/gs/os/index.ts +19 -0
- package/gs/os/path.gs.ts +35 -0
- package/gs/os/path_unix.gs.ts +49 -0
- package/gs/os/pidfd_js.gs.ts +25 -0
- package/gs/os/pipe_wasm.gs.ts +17 -0
- package/gs/os/proc.gs.ts +84 -0
- package/gs/os/proc_js.gs.ts +15 -0
- package/gs/os/rawconn_js.gs.ts +30 -0
- package/gs/os/removeall_js.gs.ts +9 -0
- package/gs/os/root_js.gs.ts +111 -0
- package/gs/os/root_nonwindows.gs.ts +6 -0
- package/gs/os/root_noopenat.gs.ts +45 -0
- package/gs/os/stat.gs.ts +38 -0
- package/gs/os/stat_js.gs.ts +30 -0
- package/gs/os/stat_unix_js.gs.ts +27 -0
- package/gs/os/sticky_bsd.gs.ts +4 -0
- package/gs/os/sys.gs.ts +12 -0
- package/gs/os/sys_bsd.gs.ts +17 -0
- package/gs/os/sys_js.gs.ts +9 -0
- package/gs/os/tempfile.gs.ts +34 -0
- package/gs/os/types.gs.ts +170 -0
- package/gs/os/types_js.gs.ts +205 -0
- package/gs/os/types_unix.gs.ts +118 -0
- package/gs/os/wait_unimp.gs.ts +2 -0
- package/gs/os/zero_copy_posix.gs.ts +35 -0
- package/gs/os/zero_copy_stub.gs.ts +4 -0
- package/gs/sync/atomic/doc.gs.ts +276 -0
- package/gs/sync/atomic/doc_64.gs.ts +168 -0
- package/gs/sync/atomic/index.ts +4 -0
- package/gs/sync/atomic/type.gs.ts +596 -0
- package/gs/sync/atomic/value.gs.ts +158 -0
- package/gs/syscall/index.ts +204 -0
- package/gs/unsafe/unsafe.ts +6 -0
- package/package.json +1 -1
package/gs/os/sys.gs.ts
ADDED
|
@@ -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,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,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
|
+
|