goscript 0.0.47 → 0.0.49
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/cmd/goscript/deps.go +1 -4
- package/compiler/analysis.go +224 -63
- package/compiler/analysis_test.go +112 -0
- package/compiler/compiler.go +19 -87
- package/compiler/expr-call-type-conversion.go +148 -59
- package/compiler/expr-call.go +202 -10
- package/compiler/expr.go +5 -82
- package/compiler/gs_dependencies_test.go +60 -1
- package/compiler/spec-value.go +73 -51
- package/compiler/spec.go +293 -151
- package/compiler/stmt.go +192 -81
- package/dist/gs/builtin/builtin.d.ts +1 -5
- package/dist/gs/builtin/builtin.js +1 -34
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/fmt/fmt.js +20 -4
- package/dist/gs/fmt/fmt.js.map +1 -1
- package/dist/gs/io/fs/fs.d.ts +6 -12
- package/dist/gs/io/fs/fs.js +52 -67
- package/dist/gs/io/fs/fs.js.map +1 -1
- package/dist/gs/os/index.d.ts +2 -1
- package/dist/gs/os/index.js +1 -1
- package/dist/gs/os/index.js.map +1 -1
- package/dist/gs/os/types_js.gs.d.ts +7 -1
- package/dist/gs/os/types_js.gs.js +16 -1
- package/dist/gs/os/types_js.gs.js.map +1 -1
- package/dist/gs/os/types_unix.gs.js +2 -2
- package/dist/gs/os/types_unix.gs.js.map +1 -1
- package/dist/gs/reflect/index.d.ts +3 -3
- package/dist/gs/reflect/index.js +2 -2
- package/dist/gs/reflect/index.js.map +1 -1
- package/dist/gs/reflect/map.js +2 -2
- package/dist/gs/reflect/map.js.map +1 -1
- package/dist/gs/reflect/type.d.ts +8 -9
- package/dist/gs/reflect/type.js +101 -103
- package/dist/gs/reflect/type.js.map +1 -1
- package/dist/gs/reflect/types.d.ts +1 -10
- package/dist/gs/reflect/types.js +3 -26
- package/dist/gs/reflect/types.js.map +1 -1
- package/dist/gs/reflect/value.js +23 -23
- package/dist/gs/reflect/value.js.map +1 -1
- package/dist/gs/reflect/visiblefields.js +3 -3
- package/dist/gs/reflect/visiblefields.js.map +1 -1
- package/dist/gs/time/time.d.ts +11 -22
- package/dist/gs/time/time.js +29 -57
- package/dist/gs/time/time.js.map +1 -1
- package/gs/TODO.md +129 -0
- package/gs/builtin/builtin.ts +3 -41
- package/gs/builtin/slice.ts +1 -1
- package/gs/bytes/meta.json +10 -0
- package/gs/fmt/fmt.ts +18 -4
- package/gs/fmt/meta.json +5 -0
- package/gs/internal/meta.json +5 -0
- package/gs/io/fs/fs.ts +58 -73
- package/gs/io/meta.json +9 -0
- package/gs/maps/meta.json +6 -0
- package/gs/math/meta.json +5 -0
- package/gs/os/index.ts +8 -1
- package/gs/os/meta.json +15 -0
- package/gs/os/types_js.gs.ts +22 -1
- package/gs/os/types_unix.gs.ts +2 -2
- package/gs/path/meta.json +6 -0
- package/gs/reflect/function-types.test.ts +10 -10
- package/gs/reflect/index.ts +6 -6
- package/gs/reflect/map.ts +2 -2
- package/gs/reflect/meta.json +5 -0
- package/gs/reflect/type.ts +108 -103
- package/gs/reflect/types.ts +2 -28
- package/gs/reflect/value.ts +23 -23
- package/gs/reflect/visiblefields.ts +3 -3
- package/gs/strconv/meta.json +5 -0
- package/gs/strings/meta.json +9 -0
- package/gs/sync/meta.json +19 -0
- package/gs/time/time.ts +32 -65
- package/package.json +1 -1
- package/dist/gs/builtin/io.d.ts +0 -16
- package/dist/gs/builtin/io.js +0 -15
- package/dist/gs/builtin/io.js.map +0 -1
- package/dist/gs/internal/testlog/index.d.ts +0 -1
- package/dist/gs/internal/testlog/index.js +0 -5
- package/dist/gs/internal/testlog/index.js.map +0 -1
- package/dist/gs/maps/iter.gs.d.ts +0 -7
- package/dist/gs/maps/iter.gs.js +0 -65
- package/dist/gs/maps/iter.gs.js.map +0 -1
- package/dist/gs/maps/maps.gs.d.ts +0 -7
- package/dist/gs/maps/maps.gs.js +0 -79
- package/dist/gs/maps/maps.gs.js.map +0 -1
- package/dist/gs/reflect/abi.d.ts +0 -59
- package/dist/gs/reflect/abi.gs.d.ts +0 -59
- package/dist/gs/reflect/abi.gs.js +0 -79
- package/dist/gs/reflect/abi.gs.js.map +0 -1
- package/dist/gs/reflect/abi.js +0 -79
- package/dist/gs/reflect/abi.js.map +0 -1
- package/dist/gs/reflect/badlinkname.d.ts +0 -52
- package/dist/gs/reflect/badlinkname.gs.d.ts +0 -52
- package/dist/gs/reflect/badlinkname.gs.js +0 -72
- package/dist/gs/reflect/badlinkname.gs.js.map +0 -1
- package/dist/gs/reflect/badlinkname.js +0 -72
- package/dist/gs/reflect/badlinkname.js.map +0 -1
- package/dist/gs/reflect/deepequal.gs.d.ts +0 -25
- package/dist/gs/reflect/deepequal.gs.js +0 -308
- package/dist/gs/reflect/deepequal.gs.js.map +0 -1
- package/dist/gs/reflect/float32reg_generic.gs.d.ts +0 -2
- package/dist/gs/reflect/float32reg_generic.gs.js +0 -10
- package/dist/gs/reflect/float32reg_generic.gs.js.map +0 -1
- package/dist/gs/reflect/index.gs.d.ts +0 -1
- package/dist/gs/reflect/index.gs.js +0 -3
- package/dist/gs/reflect/index.gs.js.map +0 -1
- package/dist/gs/reflect/iter.gs.d.ts +0 -3
- package/dist/gs/reflect/iter.gs.js +0 -24
- package/dist/gs/reflect/iter.gs.js.map +0 -1
- package/dist/gs/reflect/makefunc.gs.d.ts +0 -34
- package/dist/gs/reflect/makefunc.gs.js +0 -288
- package/dist/gs/reflect/makefunc.gs.js.map +0 -1
- package/dist/gs/reflect/map_swiss.gs.d.ts +0 -14
- package/dist/gs/reflect/map_swiss.gs.js +0 -70
- package/dist/gs/reflect/map_swiss.gs.js.map +0 -1
- package/dist/gs/reflect/reflect.gs.d.ts +0 -132
- package/dist/gs/reflect/reflect.gs.js +0 -437
- package/dist/gs/reflect/reflect.gs.js.map +0 -1
- package/dist/gs/reflect/swapper.gs.d.ts +0 -1
- package/dist/gs/reflect/swapper.gs.js +0 -32
- package/dist/gs/reflect/swapper.gs.js.map +0 -1
- package/dist/gs/reflect/type.gs.d.ts +0 -4
- package/dist/gs/reflect/type.gs.js +0 -21
- package/dist/gs/reflect/type.gs.js.map +0 -1
- package/dist/gs/reflect/value.gs.d.ts +0 -4
- package/dist/gs/reflect/value.gs.js +0 -12
- package/dist/gs/reflect/value.gs.js.map +0 -1
- package/dist/gs/reflect/visiblefields.gs.d.ts +0 -3
- package/dist/gs/reflect/visiblefields.gs.js +0 -123
- package/dist/gs/reflect/visiblefields.gs.js.map +0 -1
- package/dist/gs/stringslite/index.d.ts +0 -1
- package/dist/gs/stringslite/index.js +0 -2
- package/dist/gs/stringslite/index.js.map +0 -1
- package/dist/gs/stringslite/strings.d.ts +0 -11
- package/dist/gs/stringslite/strings.js +0 -67
- package/dist/gs/stringslite/strings.js.map +0 -1
- package/gs/bytes/metadata.go +0 -12
- package/gs/fmt/metadata.go +0 -7
- package/gs/internal/metadata.go +0 -7
- package/gs/io/io.go +0 -75
- package/gs/io/metadata.go +0 -11
- package/gs/maps/metadata.go +0 -8
- package/gs/math/metadata.go +0 -7
- package/gs/os/metadata.go +0 -17
- package/gs/path/metadata.go +0 -8
- package/gs/reflect/metadata.go +0 -7
- package/gs/strconv/metadata.go +0 -7
- package/gs/strings/metadata.go +0 -11
- package/gs/sync/metadata.go +0 -7
- package/gs/sync/sync.go +0 -64
package/gs/fmt/fmt.ts
CHANGED
|
@@ -200,10 +200,24 @@ function parseFormat(format: string, args: any[]): string {
|
|
|
200
200
|
// Global stdout simulation for Print functions
|
|
201
201
|
let stdout = {
|
|
202
202
|
write: (data: string) => {
|
|
203
|
-
//
|
|
204
|
-
//
|
|
205
|
-
|
|
206
|
-
|
|
203
|
+
// Use process.stdout.write if available (Node.js), otherwise fallback to console.log
|
|
204
|
+
// but we need to avoid adding extra newlines that console.log adds
|
|
205
|
+
if (typeof process !== 'undefined' && process.stdout && process.stdout.write) {
|
|
206
|
+
process.stdout.write(data)
|
|
207
|
+
} else {
|
|
208
|
+
// In browser environments, we need to use console.log but handle newlines carefully
|
|
209
|
+
// If the data already ends with \n, we should strip it to avoid double newlines
|
|
210
|
+
if (data.endsWith('\n')) {
|
|
211
|
+
console.log(data.slice(0, -1))
|
|
212
|
+
} else {
|
|
213
|
+
// Use console.log without adding newline by using a custom method
|
|
214
|
+
if (console.log) {
|
|
215
|
+
// For data without newlines, we can just print it directly
|
|
216
|
+
// This is a bit of a hack but works for most cases
|
|
217
|
+
console.log(data)
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
207
221
|
},
|
|
208
222
|
}
|
|
209
223
|
|
package/gs/io/fs/fs.ts
CHANGED
|
@@ -369,148 +369,133 @@ $.registerInterfaceType(
|
|
|
369
369
|
],
|
|
370
370
|
)
|
|
371
371
|
|
|
372
|
-
export
|
|
373
|
-
constructor(private _value: number) {}
|
|
372
|
+
export type FileMode = number
|
|
374
373
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
return fileModeString(this)
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
static from(value: number): FileMode {
|
|
384
|
-
return new FileMode(value)
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
// IsDir reports whether m describes a directory.
|
|
388
|
-
// That is, it tests for the ModeDir bit being set in m.
|
|
389
|
-
IsDir(): boolean {
|
|
390
|
-
return (this._value & ModeDir.valueOf()) != 0
|
|
391
|
-
}
|
|
374
|
+
// IsDir reports whether m describes a directory.
|
|
375
|
+
// That is, it tests for the ModeDir bit being set in m.
|
|
376
|
+
export function FileMode_IsDir(receiver: FileMode): boolean {
|
|
377
|
+
return (receiver & ModeDir) != 0
|
|
378
|
+
}
|
|
392
379
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
380
|
+
// IsRegular reports whether m describes a regular file.
|
|
381
|
+
// That is, it tests that no mode type bits are set.
|
|
382
|
+
export function FileMode_IsRegular(receiver: FileMode): boolean {
|
|
383
|
+
return (receiver & ModeType) == 0
|
|
384
|
+
}
|
|
398
385
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
386
|
+
// Perm returns the Unix permission bits in m (m & ModePerm).
|
|
387
|
+
export function FileMode_Perm(receiver: FileMode): FileMode {
|
|
388
|
+
return (receiver & ModePerm) as FileMode
|
|
389
|
+
}
|
|
403
390
|
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
391
|
+
// String returns a textual representation of the file mode.
|
|
392
|
+
export function FileMode_String(receiver: FileMode): string {
|
|
393
|
+
return fileModeString(receiver)
|
|
394
|
+
}
|
|
408
395
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
}
|
|
396
|
+
// Type returns type bits in m (m & ModeType).
|
|
397
|
+
export function FileMode_Type(receiver: FileMode): FileMode {
|
|
398
|
+
return ((receiver & ModeType) >>> 0) as FileMode
|
|
413
399
|
}
|
|
414
400
|
|
|
415
401
|
// The single letters are the abbreviations
|
|
416
402
|
// used by the String method's formatting.
|
|
417
403
|
// d: is a directory
|
|
418
|
-
export let ModeDir: FileMode =
|
|
404
|
+
export let ModeDir: FileMode = 2147483648 // 0x80000000
|
|
419
405
|
|
|
420
406
|
// a: append-only
|
|
421
|
-
export let ModeAppend: FileMode =
|
|
407
|
+
export let ModeAppend: FileMode = 1 << 30 // 0x40000000
|
|
422
408
|
|
|
423
409
|
// l: exclusive use
|
|
424
|
-
export let ModeExclusive: FileMode =
|
|
410
|
+
export let ModeExclusive: FileMode = 1 << 29 // 0x20000000
|
|
425
411
|
|
|
426
412
|
// T: temporary file; Plan 9 only
|
|
427
|
-
export let ModeTemporary: FileMode =
|
|
413
|
+
export let ModeTemporary: FileMode = 1 << 28 // 0x10000000
|
|
428
414
|
|
|
429
415
|
// L: symbolic link
|
|
430
|
-
export let ModeSymlink: FileMode =
|
|
416
|
+
export let ModeSymlink: FileMode = 1 << 27 // 0x08000000
|
|
431
417
|
|
|
432
418
|
// D: device file
|
|
433
|
-
export let ModeDevice: FileMode =
|
|
419
|
+
export let ModeDevice: FileMode = 1 << 26 // 0x04000000
|
|
434
420
|
|
|
435
421
|
// p: named pipe (FIFO)
|
|
436
|
-
export let ModeNamedPipe: FileMode =
|
|
422
|
+
export let ModeNamedPipe: FileMode = 1 << 25 // 0x02000000
|
|
437
423
|
|
|
438
424
|
// S: Unix domain socket
|
|
439
|
-
export let ModeSocket: FileMode =
|
|
425
|
+
export let ModeSocket: FileMode = 1 << 24 // 0x01000000
|
|
440
426
|
|
|
441
427
|
// u: setuid
|
|
442
|
-
export let ModeSetuid: FileMode =
|
|
428
|
+
export let ModeSetuid: FileMode = 1 << 23 // 0x00800000
|
|
443
429
|
|
|
444
430
|
// g: setgid
|
|
445
|
-
export let ModeSetgid: FileMode =
|
|
431
|
+
export let ModeSetgid: FileMode = 1 << 22 // 0x00400000
|
|
446
432
|
|
|
447
433
|
// c: Unix character device, when ModeDevice is set
|
|
448
|
-
export let ModeCharDevice: FileMode =
|
|
434
|
+
export let ModeCharDevice: FileMode = 1 << 21 // 0x00200000
|
|
449
435
|
|
|
450
436
|
// t: sticky
|
|
451
|
-
export let ModeSticky: FileMode =
|
|
437
|
+
export let ModeSticky: FileMode = 1 << 20 // 0x00100000
|
|
452
438
|
|
|
453
439
|
// ?: non-regular file; nothing else is known about this file
|
|
454
|
-
export let ModeIrregular: FileMode =
|
|
440
|
+
export let ModeIrregular: FileMode = 1 << 19 // 0x00080000
|
|
455
441
|
|
|
456
442
|
// Mask for the type bits. For regular files, none will be set.
|
|
457
|
-
export let ModeType: FileMode =
|
|
443
|
+
export let ModeType: FileMode = 2401763328
|
|
458
444
|
|
|
459
445
|
// Unix permission bits
|
|
460
|
-
export let ModePerm: FileMode =
|
|
446
|
+
export let ModePerm: FileMode = 0o777
|
|
461
447
|
|
|
462
448
|
// FileMode methods
|
|
463
449
|
export function fileModeString(mode: FileMode): string {
|
|
464
450
|
const buf: string[] = []
|
|
465
|
-
const w = mode
|
|
451
|
+
const w = mode
|
|
466
452
|
|
|
467
453
|
// File type - these are the main type indicators
|
|
468
|
-
if (w & ModeDir
|
|
469
|
-
else if (w & ModeSymlink
|
|
470
|
-
else if (w & ModeNamedPipe
|
|
471
|
-
else if (w & ModeSocket
|
|
472
|
-
else if (w & ModeDevice
|
|
473
|
-
if (w & ModeCharDevice
|
|
454
|
+
if (w & ModeDir) buf.push('d')
|
|
455
|
+
else if (w & ModeSymlink) buf.push('L')
|
|
456
|
+
else if (w & ModeNamedPipe) buf.push('p')
|
|
457
|
+
else if (w & ModeSocket) buf.push('S')
|
|
458
|
+
else if (w & ModeDevice) {
|
|
459
|
+
if (w & ModeCharDevice) buf.push('c')
|
|
474
460
|
else buf.push('D')
|
|
475
|
-
}
|
|
476
|
-
else if (w & ModeIrregular.valueOf()) buf.push('?')
|
|
461
|
+
} else if (w & ModeIrregular) buf.push('?')
|
|
477
462
|
else buf.push('-')
|
|
478
463
|
|
|
479
464
|
// Permission bits
|
|
480
|
-
const perm = w & ModePerm
|
|
465
|
+
const perm = w & ModePerm
|
|
481
466
|
buf.push(perm & 0o400 ? 'r' : '-')
|
|
482
467
|
buf.push(perm & 0o200 ? 'w' : '-')
|
|
483
|
-
|
|
468
|
+
|
|
484
469
|
// Execute/search for user
|
|
485
470
|
if (perm & 0o100) {
|
|
486
|
-
if (w & ModeSetuid
|
|
471
|
+
if (w & ModeSetuid) buf.push('s')
|
|
487
472
|
else buf.push('x')
|
|
488
473
|
} else {
|
|
489
|
-
if (w & ModeSetuid
|
|
474
|
+
if (w & ModeSetuid) buf.push('S')
|
|
490
475
|
else buf.push('-')
|
|
491
476
|
}
|
|
492
|
-
|
|
477
|
+
|
|
493
478
|
buf.push(perm & 0o040 ? 'r' : '-')
|
|
494
479
|
buf.push(perm & 0o020 ? 'w' : '-')
|
|
495
|
-
|
|
480
|
+
|
|
496
481
|
// Execute/search for group
|
|
497
482
|
if (perm & 0o010) {
|
|
498
|
-
if (w & ModeSetgid
|
|
483
|
+
if (w & ModeSetgid) buf.push('s')
|
|
499
484
|
else buf.push('x')
|
|
500
485
|
} else {
|
|
501
|
-
if (w & ModeSetgid
|
|
486
|
+
if (w & ModeSetgid) buf.push('S')
|
|
502
487
|
else buf.push('-')
|
|
503
488
|
}
|
|
504
|
-
|
|
489
|
+
|
|
505
490
|
buf.push(perm & 0o004 ? 'r' : '-')
|
|
506
491
|
buf.push(perm & 0o002 ? 'w' : '-')
|
|
507
|
-
|
|
492
|
+
|
|
508
493
|
// Execute/search for other
|
|
509
494
|
if (perm & 0o001) {
|
|
510
|
-
if (w & ModeSticky
|
|
495
|
+
if (w & ModeSticky) buf.push('t')
|
|
511
496
|
else buf.push('x')
|
|
512
497
|
} else {
|
|
513
|
-
if (w & ModeSticky
|
|
498
|
+
if (w & ModeSticky) buf.push('T')
|
|
514
499
|
else buf.push('-')
|
|
515
500
|
}
|
|
516
501
|
|
|
@@ -518,7 +503,7 @@ export function fileModeString(mode: FileMode): string {
|
|
|
518
503
|
}
|
|
519
504
|
|
|
520
505
|
export function fileModeType(mode: FileMode): FileMode {
|
|
521
|
-
return
|
|
506
|
+
return (mode & ModeType) as FileMode
|
|
522
507
|
}
|
|
523
508
|
|
|
524
509
|
export class PathError {
|
package/gs/io/meta.json
ADDED
package/gs/os/index.ts
CHANGED
|
@@ -107,7 +107,11 @@ export {
|
|
|
107
107
|
DirEntry,
|
|
108
108
|
File,
|
|
109
109
|
FileInfo,
|
|
110
|
-
|
|
110
|
+
FileMode_IsDir,
|
|
111
|
+
FileMode_IsRegular,
|
|
112
|
+
FileMode_Perm,
|
|
113
|
+
FileMode_String,
|
|
114
|
+
FileMode_Type,
|
|
111
115
|
Getpagesize,
|
|
112
116
|
ModeAppend,
|
|
113
117
|
ModeCharDevice,
|
|
@@ -126,3 +130,6 @@ export {
|
|
|
126
130
|
ModeType,
|
|
127
131
|
SameFile,
|
|
128
132
|
} from './types_js.gs.js'
|
|
133
|
+
|
|
134
|
+
// Export FileMode as a type
|
|
135
|
+
export type { FileMode } from './types_js.gs.js'
|
package/gs/os/meta.json
ADDED
package/gs/os/types_js.gs.ts
CHANGED
|
@@ -9,7 +9,7 @@ import * as syscall from "@goscript/syscall/index.js"
|
|
|
9
9
|
// Re-export essential types
|
|
10
10
|
export type Time = time.Time;
|
|
11
11
|
export type FileInfo = fs.FileInfo;
|
|
12
|
-
export
|
|
12
|
+
export type FileMode = fs.FileMode;
|
|
13
13
|
export type DirEntry = fs.DirEntry;
|
|
14
14
|
|
|
15
15
|
// Export runtime values for ES module compatibility
|
|
@@ -202,4 +202,25 @@ export let ModePerm: fs.FileMode = fs.ModePerm
|
|
|
202
202
|
export function SameFile(fi1: fs.FileInfo, fi2: fs.FileInfo): boolean {
|
|
203
203
|
// In JavaScript environment, always return false as we can't compare files
|
|
204
204
|
return false
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// FileMode wrapper functions - re-export from fs module
|
|
208
|
+
export function FileMode_IsDir(receiver: fs.FileMode): boolean {
|
|
209
|
+
return fs.FileMode_IsDir(receiver)
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
export function FileMode_IsRegular(receiver: fs.FileMode): boolean {
|
|
213
|
+
return fs.FileMode_IsRegular(receiver)
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export function FileMode_Perm(receiver: fs.FileMode): fs.FileMode {
|
|
217
|
+
return fs.FileMode_Perm(receiver)
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export function FileMode_String(receiver: fs.FileMode): string {
|
|
221
|
+
return fs.FileMode_String(receiver)
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export function FileMode_Type(receiver: fs.FileMode): fs.FileMode {
|
|
225
|
+
return fs.FileMode_Type(receiver)
|
|
205
226
|
}
|
package/gs/os/types_unix.gs.ts
CHANGED
|
@@ -54,7 +54,7 @@ class fileStat {
|
|
|
54
54
|
this._fields = {
|
|
55
55
|
name: $.varRef(init?.name ?? ""),
|
|
56
56
|
size: $.varRef(init?.size ?? 0),
|
|
57
|
-
mode: $.varRef(init?.mode ??
|
|
57
|
+
mode: $.varRef(init?.mode ?? 0),
|
|
58
58
|
modTime: $.varRef(init?.modTime?.clone() ?? time.Now()),
|
|
59
59
|
sys: $.varRef(init?.sys?.clone() ?? new syscall.Stat_t())
|
|
60
60
|
}
|
|
@@ -79,7 +79,7 @@ class fileStat {
|
|
|
79
79
|
|
|
80
80
|
public IsDir(): boolean {
|
|
81
81
|
const fileStat = this
|
|
82
|
-
return (fileStat!.Mode()
|
|
82
|
+
return (fileStat!.Mode() & fs.ModeDir) !== 0
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
public Size(): number {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest'
|
|
2
|
-
import { TypeOf } from './type.js'
|
|
2
|
+
import { TypeOf, Kind_String } from './type.js'
|
|
3
3
|
|
|
4
4
|
describe('Function Type Detection', () => {
|
|
5
5
|
it('should detect regular function types', () => {
|
|
@@ -8,7 +8,7 @@ describe('Function Type Detection', () => {
|
|
|
8
8
|
}
|
|
9
9
|
const type = TypeOf(regularFunc)
|
|
10
10
|
expect(type.String()).toMatch(/^func/)
|
|
11
|
-
expect(type.Kind()
|
|
11
|
+
expect(Kind_String(type.Kind())).toBe('func')
|
|
12
12
|
})
|
|
13
13
|
|
|
14
14
|
it('should detect GoScript typed functions with __goTypeName', () => {
|
|
@@ -19,7 +19,7 @@ describe('Function Type Detection', () => {
|
|
|
19
19
|
Object.assign(greetFunc, { __goTypeName: 'Greeter' })
|
|
20
20
|
const greetType = TypeOf(greetFunc)
|
|
21
21
|
expect(greetType.String()).toBe('func(string) string')
|
|
22
|
-
expect(greetType.Kind()
|
|
22
|
+
expect(Kind_String(greetType.Kind())).toBe('func')
|
|
23
23
|
|
|
24
24
|
// Test Adder function type
|
|
25
25
|
const addFunc = function (a: number, b: number) {
|
|
@@ -28,7 +28,7 @@ describe('Function Type Detection', () => {
|
|
|
28
28
|
Object.assign(addFunc, { __goTypeName: 'Adder' })
|
|
29
29
|
const addType = TypeOf(addFunc)
|
|
30
30
|
expect(addType.String()).toBe('func(int, int) int')
|
|
31
|
-
expect(addType.Kind()
|
|
31
|
+
expect(Kind_String(addType.Kind())).toBe('func')
|
|
32
32
|
})
|
|
33
33
|
|
|
34
34
|
it('should detect functions with full __typeInfo metadata', () => {
|
|
@@ -49,7 +49,7 @@ describe('Function Type Detection', () => {
|
|
|
49
49
|
|
|
50
50
|
const type = TypeOf(complexFunc)
|
|
51
51
|
expect(type.String()).toBe('func(int, int) int')
|
|
52
|
-
expect(type.Kind()
|
|
52
|
+
expect(Kind_String(type.Kind())).toBe('func')
|
|
53
53
|
})
|
|
54
54
|
|
|
55
55
|
it('should handle functions with multiple return types', () => {
|
|
@@ -70,7 +70,7 @@ describe('Function Type Detection', () => {
|
|
|
70
70
|
|
|
71
71
|
const type = TypeOf(multiReturnFunc)
|
|
72
72
|
expect(type.String()).toBe('func() (int, string)')
|
|
73
|
-
expect(type.Kind()
|
|
73
|
+
expect(Kind_String(type.Kind())).toBe('func')
|
|
74
74
|
})
|
|
75
75
|
|
|
76
76
|
it('should handle functions with no parameters', () => {
|
|
@@ -88,7 +88,7 @@ describe('Function Type Detection', () => {
|
|
|
88
88
|
|
|
89
89
|
const type = TypeOf(noParamFunc)
|
|
90
90
|
expect(type.String()).toBe('func() int')
|
|
91
|
-
expect(type.Kind()
|
|
91
|
+
expect(Kind_String(type.Kind())).toBe('func')
|
|
92
92
|
})
|
|
93
93
|
|
|
94
94
|
it('should handle functions with no return type', () => {
|
|
@@ -106,7 +106,7 @@ describe('Function Type Detection', () => {
|
|
|
106
106
|
|
|
107
107
|
const type = TypeOf(voidFunc)
|
|
108
108
|
expect(type.String()).toBe('func(int)')
|
|
109
|
-
expect(type.Kind()
|
|
109
|
+
expect(Kind_String(type.Kind())).toBe('func')
|
|
110
110
|
})
|
|
111
111
|
|
|
112
112
|
it('should fallback to generic func for unknown typed functions', () => {
|
|
@@ -117,14 +117,14 @@ describe('Function Type Detection', () => {
|
|
|
117
117
|
|
|
118
118
|
const type = TypeOf(unknownFunc)
|
|
119
119
|
expect(type.String()).toBe('func')
|
|
120
|
-
expect(type.Kind()
|
|
120
|
+
expect(Kind_String(type.Kind())).toBe('func')
|
|
121
121
|
})
|
|
122
122
|
|
|
123
123
|
it('should handle arrow functions', () => {
|
|
124
124
|
const arrowFunc = (x: number) => x * 2
|
|
125
125
|
const type = TypeOf(arrowFunc)
|
|
126
126
|
expect(type.String()).toMatch(/^func/)
|
|
127
|
-
expect(type.Kind()
|
|
127
|
+
expect(Kind_String(type.Kind())).toBe('func')
|
|
128
128
|
})
|
|
129
129
|
|
|
130
130
|
it('should detect functions that return values vs void functions', () => {
|
package/gs/reflect/index.ts
CHANGED
|
@@ -3,15 +3,19 @@ export {
|
|
|
3
3
|
TypeOf,
|
|
4
4
|
ValueOf,
|
|
5
5
|
Value,
|
|
6
|
-
|
|
6
|
+
Kind_String,
|
|
7
7
|
ArrayOf,
|
|
8
8
|
SliceOf,
|
|
9
9
|
PointerTo,
|
|
10
10
|
PtrTo,
|
|
11
11
|
MapOf,
|
|
12
12
|
ChanOf,
|
|
13
|
+
ChanDir_String,
|
|
14
|
+
RecvDir,
|
|
15
|
+
SendDir,
|
|
16
|
+
BothDir,
|
|
13
17
|
} from './type'
|
|
14
|
-
export type { Type } from './type'
|
|
18
|
+
export type { Type, ChanDir, Kind } from './type'
|
|
15
19
|
export { DeepEqual } from './deepequal'
|
|
16
20
|
export {
|
|
17
21
|
Zero,
|
|
@@ -28,10 +32,6 @@ export { Swapper } from './swapper'
|
|
|
28
32
|
|
|
29
33
|
// Export new types and constants
|
|
30
34
|
export {
|
|
31
|
-
ChanDir,
|
|
32
|
-
RecvDir,
|
|
33
|
-
SendDir,
|
|
34
|
-
BothDir,
|
|
35
35
|
StructTag,
|
|
36
36
|
ValueError,
|
|
37
37
|
SelectDir,
|
package/gs/reflect/map.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Type, Kind, Value } from './type.js'
|
|
1
|
+
import { Type, Kind, Value, Map as MapKind } from './type.js'
|
|
2
2
|
|
|
3
3
|
// Simple MapOf implementation using JavaScript Map
|
|
4
4
|
export function MapOf(key: Type, elem: Type): Type {
|
|
@@ -17,7 +17,7 @@ class MapType implements Type {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
public Kind(): Kind {
|
|
20
|
-
return
|
|
20
|
+
return MapKind // Map kind
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
public Size(): number {
|