goscript 0.0.37 → 0.0.39
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/analysis.go +129 -8
- package/compiler/compiler.go +4 -1
- package/compiler/composite-lit.go +2 -4
- package/compiler/expr-call.go +12 -0
- package/compiler/lit.go +100 -6
- package/compiler/protobuf.go +2 -2
- package/compiler/spec-value.go +3 -3
- package/compiler/spec.go +6 -3
- package/compiler/stmt-assign.go +1 -1
- package/dist/gs/builtin/builtin.d.ts +45 -0
- package/dist/gs/builtin/builtin.js +197 -0
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/slice.js +2 -1
- package/dist/gs/builtin/slice.js.map +1 -1
- package/dist/gs/bytes/buffer.gs.d.ts +56 -0
- package/dist/gs/bytes/buffer.gs.js +611 -0
- package/dist/gs/bytes/buffer.gs.js.map +1 -0
- package/dist/gs/bytes/bytes.gs.d.ts +78 -0
- package/dist/gs/bytes/bytes.gs.js +1011 -0
- package/dist/gs/bytes/bytes.gs.js.map +1 -0
- package/dist/gs/bytes/index.d.ts +4 -0
- package/dist/gs/bytes/index.js +5 -0
- package/dist/gs/bytes/index.js.map +1 -0
- package/dist/gs/bytes/iter.gs.d.ts +9 -0
- package/dist/gs/bytes/iter.gs.js +143 -0
- package/dist/gs/bytes/iter.gs.js.map +1 -0
- package/dist/gs/bytes/reader.gs.d.ts +34 -0
- package/dist/gs/bytes/reader.gs.js +198 -0
- package/dist/gs/bytes/reader.gs.js.map +1 -0
- package/dist/gs/github.com/pkg/errors/errors.d.ts +1 -1
- package/dist/gs/github.com/pkg/errors/errors.js +182 -23
- package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
- package/dist/gs/github.com/pkg/errors/go113.d.ts +1 -1
- package/dist/gs/github.com/pkg/errors/go113.js +1 -1
- package/dist/gs/github.com/pkg/errors/go113.js.map +1 -1
- package/dist/gs/github.com/pkg/errors/index.d.ts +3 -3
- package/dist/gs/github.com/pkg/errors/index.js +3 -3
- package/dist/gs/github.com/pkg/errors/index.js.map +1 -1
- package/dist/gs/github.com/pkg/errors/stack.d.ts +1 -1
- package/dist/gs/github.com/pkg/errors/stack.js +8 -5
- package/dist/gs/github.com/pkg/errors/stack.js.map +1 -1
- package/dist/gs/internal/abi/index.d.ts +20 -0
- package/dist/gs/internal/abi/index.js +20 -0
- package/dist/gs/internal/abi/index.js.map +1 -0
- package/dist/gs/internal/bytealg/index.d.ts +14 -0
- package/dist/gs/internal/bytealg/index.js +139 -0
- package/dist/gs/internal/bytealg/index.js.map +1 -0
- package/dist/gs/internal/byteorder/index.d.ts +1 -1
- package/dist/gs/internal/byteorder/index.js +4 -4
- package/dist/gs/internal/byteorder/index.js.map +1 -1
- package/dist/gs/math/index.d.ts +44 -44
- package/dist/gs/math/index.js +44 -44
- package/dist/gs/math/index.js.map +1 -1
- package/dist/gs/os/index.d.ts +19 -19
- package/dist/gs/os/index.js +19 -19
- package/dist/gs/os/index.js.map +1 -1
- package/dist/gs/reflect/deepequal.d.ts +2 -0
- package/dist/gs/reflect/deepequal.js +91 -0
- package/dist/gs/reflect/deepequal.js.map +1 -0
- package/dist/gs/reflect/index.d.ts +8 -0
- package/dist/gs/reflect/index.js +10 -0
- package/dist/gs/reflect/index.js.map +1 -0
- package/dist/gs/reflect/iter.d.ts +4 -0
- package/dist/gs/reflect/iter.js +24 -0
- package/dist/gs/reflect/iter.js.map +1 -0
- package/dist/gs/reflect/map.d.ts +20 -0
- package/dist/gs/reflect/map.js +74 -0
- package/dist/gs/reflect/map.js.map +1 -0
- package/dist/gs/reflect/swapper.d.ts +2 -0
- package/dist/gs/reflect/swapper.js +46 -0
- package/dist/gs/reflect/swapper.js.map +1 -0
- package/dist/gs/reflect/type.d.ts +134 -0
- package/dist/gs/reflect/type.js +825 -0
- package/dist/gs/reflect/type.js.map +1 -0
- package/dist/gs/reflect/types.d.ts +90 -0
- package/dist/gs/reflect/types.js +119 -0
- package/dist/gs/reflect/types.js.map +1 -0
- package/dist/gs/reflect/value.d.ts +13 -0
- package/dist/gs/reflect/value.js +202 -0
- package/dist/gs/reflect/value.js.map +1 -0
- package/dist/gs/reflect/visiblefields.d.ts +4 -0
- package/dist/gs/reflect/visiblefields.js +149 -0
- package/dist/gs/reflect/visiblefields.js.map +1 -0
- package/dist/gs/strconv/index.d.ts +6 -6
- package/dist/gs/strconv/index.js +6 -6
- package/dist/gs/strconv/index.js.map +1 -1
- package/dist/gs/strings/index.d.ts +1 -1
- package/dist/gs/strings/index.js +1 -1
- package/dist/gs/strings/index.js.map +1 -1
- package/dist/gs/strings/replace.js.map +1 -1
- package/dist/gs/sync/atomic/index.d.ts +4 -4
- package/dist/gs/sync/atomic/index.js +4 -4
- package/dist/gs/sync/atomic/index.js.map +1 -1
- package/dist/gs/syscall/index.d.ts +6 -6
- package/dist/gs/syscall/index.js +34 -28
- package/dist/gs/syscall/index.js.map +1 -1
- package/dist/gs/unicode/utf8/utf8.d.ts +1 -1
- package/dist/gs/unicode/utf8/utf8.js +4 -2
- package/dist/gs/unicode/utf8/utf8.js.map +1 -1
- package/dist/gs/unsafe/unsafe.js.map +1 -1
- package/gs/builtin/builtin.ts +219 -0
- package/gs/builtin/slice.ts +2 -1
- package/gs/bytes/buffer.gs.ts +614 -0
- package/gs/bytes/bytes.gs.ts +1180 -0
- package/gs/bytes/godoc.txt +69 -0
- package/gs/bytes/index.ts +69 -0
- package/gs/bytes/iter.gs.ts +149 -0
- package/gs/bytes/reader.gs.ts +230 -0
- package/gs/github.com/pkg/errors/errors.ts +408 -238
- package/gs/github.com/pkg/errors/go113.ts +5 -6
- package/gs/github.com/pkg/errors/index.ts +12 -3
- package/gs/github.com/pkg/errors/stack.ts +107 -105
- package/gs/internal/abi/index.ts +37 -0
- package/gs/internal/bytealg/index.ts +149 -0
- package/gs/internal/byteorder/index.ts +5 -5
- package/gs/math/abs.gs.test.ts +1 -1
- package/gs/math/acosh.gs.test.ts +4 -2
- package/gs/math/asin.gs.test.ts +1 -1
- package/gs/math/asinh.gs.test.ts +7 -3
- package/gs/math/atan.gs.test.ts +1 -1
- package/gs/math/atan2.gs.test.ts +17 -9
- package/gs/math/atanh.gs.test.ts +1 -1
- package/gs/math/bits.gs.test.ts +1 -1
- package/gs/math/cbrt.gs.test.ts +1 -1
- package/gs/math/const.gs.test.ts +34 -8
- package/gs/math/copysign.gs.test.ts +7 -3
- package/gs/math/dim.gs.test.ts +19 -7
- package/gs/math/erf.gs.test.ts +1 -1
- package/gs/math/erfinv.gs.test.ts +4 -2
- package/gs/math/exp.gs.test.ts +1 -1
- package/gs/math/expm1.gs.test.ts +6 -4
- package/gs/math/floor.gs.test.ts +17 -4
- package/gs/math/fma.gs.test.ts +53 -53
- package/gs/math/frexp.gs.test.ts +112 -117
- package/gs/math/gamma.gs.test.ts +1 -1
- package/gs/math/hypot.gs.test.ts +53 -53
- package/gs/math/index.ts +80 -44
- package/gs/math/j0.gs.test.ts +6 -2
- package/gs/math/j1.gs.test.ts +6 -2
- package/gs/math/jn.gs.test.ts +9 -5
- package/gs/math/ldexp.gs.test.ts +103 -86
- package/gs/math/lgamma.gs.test.ts +10 -10
- package/gs/math/log.gs.test.ts +1 -1
- package/gs/math/log10.gs.test.ts +1 -1
- package/gs/math/log1p.gs.test.ts +2 -2
- package/gs/math/logb.gs.test.ts +1 -1
- package/gs/math/mod.gs.test.ts +2 -2
- package/gs/math/modf.gs.test.ts +7 -7
- package/gs/math/nextafter.gs.test.ts +9 -7
- package/gs/math/pow.gs.test.ts +6 -4
- package/gs/math/pow10.gs.test.ts +1 -1
- package/gs/math/remainder.gs.test.ts +1 -1
- package/gs/math/signbit.gs.test.ts +1 -1
- package/gs/math/sin.gs.test.ts +1 -1
- package/gs/math/sincos.gs.test.ts +33 -14
- package/gs/math/sinh.gs.test.ts +1 -1
- package/gs/math/sqrt.gs.test.ts +1 -1
- package/gs/math/tan.gs.test.ts +3 -3
- package/gs/math/tanh.gs.test.ts +1 -1
- package/gs/os/index.ts +128 -19
- package/gs/reflect/ANALYSIS.md +278 -0
- package/gs/reflect/deepequal.test.ts +41 -0
- package/gs/reflect/deepequal.ts +169 -0
- package/gs/reflect/function-types.test.ts +146 -0
- package/gs/reflect/godoc.txt +67 -0
- package/gs/reflect/index.ts +83 -0
- package/gs/reflect/iter.ts +44 -0
- package/gs/reflect/map.test.ts +30 -0
- package/gs/reflect/map.ts +85 -0
- package/gs/reflect/swapper.ts +52 -0
- package/gs/reflect/type.ts +1016 -0
- package/gs/reflect/types.ts +214 -0
- package/gs/reflect/value.ts +270 -0
- package/gs/reflect/visiblefields.ts +177 -0
- package/gs/strconv/index.ts +39 -6
- package/gs/strings/index.ts +7 -1
- package/gs/strings/replace.ts +1 -9
- package/gs/sync/atomic/index.ts +53 -4
- package/gs/syscall/index.ts +45 -37
- package/gs/unicode/utf8/utf8.ts +8 -5
- package/gs/unsafe/unsafe.ts +1 -1
- package/package.json +2 -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/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/internal/testlog/index.ts +0 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as $ from
|
|
1
|
+
import * as $ from '../../../builtin/builtin.js'
|
|
2
2
|
|
|
3
|
-
import * as stderrors from
|
|
3
|
+
import * as stderrors from '../../../errors/index.js'
|
|
4
4
|
|
|
5
5
|
// Is reports whether any error in err's chain matches target.
|
|
6
6
|
//
|
|
@@ -10,7 +10,7 @@ import * as stderrors from "../../../errors/index.js"
|
|
|
10
10
|
// An error is considered to match a target if it is equal to that target or if
|
|
11
11
|
// it implements a method Is(error) bool such that Is(target) returns true.
|
|
12
12
|
export function Is(err: $.GoError, target: $.GoError): boolean {
|
|
13
|
-
|
|
13
|
+
return stderrors.Is(err, target)
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
// As finds the first error in err's chain that matches target, and if so, sets
|
|
@@ -27,13 +27,12 @@ export function Is(err: $.GoError, target: $.GoError): boolean {
|
|
|
27
27
|
// As will panic if target is not a non-nil pointer to either a type that implements
|
|
28
28
|
// error, or to any interface type. As returns false if err is nil.
|
|
29
29
|
export function As(err: $.GoError, target: null | any): boolean {
|
|
30
|
-
|
|
30
|
+
return stderrors.As(err, target)
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
// Unwrap returns the result of calling the Unwrap method on err, if err's
|
|
34
34
|
// type contains an Unwrap method returning error.
|
|
35
35
|
// Otherwise, Unwrap returns nil.
|
|
36
36
|
export function Unwrap(err: $.GoError): $.GoError {
|
|
37
|
-
|
|
37
|
+
return stderrors.Unwrap(err)
|
|
38
38
|
}
|
|
39
|
-
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
-
export {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export {
|
|
2
|
+
Cause,
|
|
3
|
+
Errorf,
|
|
4
|
+
New,
|
|
5
|
+
WithMessage,
|
|
6
|
+
WithMessagef,
|
|
7
|
+
WithStack,
|
|
8
|
+
Wrap,
|
|
9
|
+
Wrapf,
|
|
10
|
+
} from './errors.js'
|
|
11
|
+
export { As, Is, Unwrap } from './go113.js'
|
|
12
|
+
export { Frame, StackTrace } from './stack.js'
|
|
@@ -1,127 +1,129 @@
|
|
|
1
|
-
import * as $ from
|
|
1
|
+
import * as $ from '../../../builtin/builtin.js'
|
|
2
2
|
|
|
3
3
|
// Type definitions
|
|
4
|
-
export type uintptr = number
|
|
4
|
+
export type uintptr = number
|
|
5
5
|
|
|
6
6
|
export class Frame {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
7
|
+
constructor(private _value: uintptr) {}
|
|
8
|
+
|
|
9
|
+
valueOf(): uintptr {
|
|
10
|
+
return this._value
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
toString(): string {
|
|
14
|
+
return String(this._value)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
static from(value: uintptr): Frame {
|
|
18
|
+
return new Frame(value)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// pc returns the program counter for this frame;
|
|
22
|
+
// multiple frames may have the same PC value.
|
|
23
|
+
public pc(): uintptr {
|
|
24
|
+
return this._value - 1
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// file returns the full path to the file that contains the
|
|
28
|
+
// function for this Frame's pc.
|
|
29
|
+
public file(): string {
|
|
30
|
+
return 'unknown'
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// line returns the line number of source code of the
|
|
34
|
+
// function for this Frame's pc.
|
|
35
|
+
public line(): number {
|
|
36
|
+
return 0
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// name returns the name of this function, if known.
|
|
40
|
+
public name(): string {
|
|
41
|
+
return 'unknown'
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// MarshalText formats a stacktrace Frame as a text string.
|
|
45
|
+
public MarshalText(): [$.Bytes, $.GoError] {
|
|
46
|
+
const name = this.name()
|
|
47
|
+
if (name == 'unknown') {
|
|
48
|
+
return [new TextEncoder().encode(name), null]
|
|
49
|
+
}
|
|
50
|
+
return [
|
|
51
|
+
new TextEncoder().encode(`${name} ${this.file()}:${this.line()}`),
|
|
52
|
+
null,
|
|
53
|
+
]
|
|
54
|
+
}
|
|
52
55
|
}
|
|
53
56
|
|
|
54
57
|
export class StackTrace {
|
|
55
|
-
|
|
58
|
+
constructor(private _value: Frame[] | null) {}
|
|
56
59
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
valueOf(): Frame[] | null {
|
|
61
|
+
return this._value
|
|
62
|
+
}
|
|
60
63
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
+
toString(): string {
|
|
65
|
+
return String(this._value)
|
|
66
|
+
}
|
|
64
67
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
+
static from(value: Frame[] | null): StackTrace {
|
|
69
|
+
return new StackTrace(value)
|
|
70
|
+
}
|
|
68
71
|
}
|
|
69
72
|
|
|
70
73
|
class stack {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
74
|
+
constructor(private _value: uintptr[]) {}
|
|
75
|
+
|
|
76
|
+
valueOf(): uintptr[] {
|
|
77
|
+
return this._value
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
toString(): string {
|
|
81
|
+
return String(this._value)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
static from(value: uintptr[]): stack {
|
|
85
|
+
return new stack(value)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
public StackTrace(): StackTrace {
|
|
89
|
+
const s = this._value
|
|
90
|
+
if (!s || s.length === 0) {
|
|
91
|
+
return new StackTrace(null)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const frames: Frame[] = []
|
|
95
|
+
for (let i = 0; i < s.length; i++) {
|
|
96
|
+
frames.push(new Frame(s[i]))
|
|
97
|
+
}
|
|
98
|
+
return new StackTrace(frames)
|
|
99
|
+
}
|
|
97
100
|
}
|
|
98
101
|
|
|
99
102
|
// callers returns a simplified stack trace using JavaScript's native stack
|
|
100
103
|
export function callers(): $.VarRef<stack> | null {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
104
|
+
try {
|
|
105
|
+
// Get JavaScript stack trace
|
|
106
|
+
throw new Error()
|
|
107
|
+
} catch (e: any) {
|
|
108
|
+
// Parse the stack trace to get some basic frame information
|
|
109
|
+
const stackLines = e.stack ? e.stack.split('\n') : []
|
|
110
|
+
|
|
111
|
+
// Create simplified frame data - just use line numbers as uintptr values
|
|
112
|
+
const pcs: uintptr[] = []
|
|
113
|
+
for (let i = 0; i < Math.min(stackLines.length, 8); i++) {
|
|
114
|
+
pcs.push(i + 1) // Simple frame counter
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const st = new stack(pcs)
|
|
118
|
+
return $.varRef(st)
|
|
119
|
+
}
|
|
117
120
|
}
|
|
118
121
|
|
|
119
122
|
// funcname extracts the function name from a full function path
|
|
120
123
|
export function funcname(name: string): string {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
const lastDot = name.lastIndexOf('.')
|
|
125
|
+
if (lastDot >= 0) {
|
|
126
|
+
return name.substring(lastDot + 1)
|
|
127
|
+
}
|
|
128
|
+
return name
|
|
126
129
|
}
|
|
127
|
-
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Placeholder abi module for reflect package compatibility
|
|
2
|
+
|
|
3
|
+
// Type represents the ABI type information
|
|
4
|
+
export interface Type {
|
|
5
|
+
Size_: number
|
|
6
|
+
PtrBytes: number
|
|
7
|
+
Hash: number
|
|
8
|
+
TFlag: number
|
|
9
|
+
Align_: number
|
|
10
|
+
FieldAlign_: number
|
|
11
|
+
Kind_: number
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// RegArgs represents register arguments
|
|
15
|
+
export interface RegArgs {
|
|
16
|
+
Ptrs?: any[]
|
|
17
|
+
Ints?: any[]
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// IntArgRegBitmap represents register usage for integer arguments
|
|
21
|
+
export class IntArgRegBitmap {
|
|
22
|
+
constructor(public value: number = 0) {}
|
|
23
|
+
|
|
24
|
+
Get(index: number): boolean {
|
|
25
|
+
return (this.value & (1 << index)) !== 0
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// FuncPCABI0 returns the entry PC of the function f for ABI0
|
|
30
|
+
export function FuncPCABI0(_f: any): number {
|
|
31
|
+
return 0 // Placeholder
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// FuncPCABIInternal returns the entry PC of the function f for the internal ABI
|
|
35
|
+
export function FuncPCABIInternal(_f: any): number {
|
|
36
|
+
return 0 // Placeholder
|
|
37
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// Placeholder bytealg module for reflect package compatibility
|
|
2
|
+
|
|
3
|
+
// Helper function to normalize bytes input
|
|
4
|
+
function normalizeBytes(b: any): any[] {
|
|
5
|
+
if (b === null || b === undefined) {
|
|
6
|
+
return []
|
|
7
|
+
}
|
|
8
|
+
if (Array.isArray(b)) {
|
|
9
|
+
return b
|
|
10
|
+
}
|
|
11
|
+
if (b instanceof Uint8Array) {
|
|
12
|
+
return Array.from(b)
|
|
13
|
+
}
|
|
14
|
+
if (b && typeof b === 'object' && 'data' in b && Array.isArray(b.data)) {
|
|
15
|
+
return b.data
|
|
16
|
+
}
|
|
17
|
+
return []
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Equal reports whether a and b are the same length and contain the same bytes.
|
|
21
|
+
export function Equal(a: any, b: any): boolean {
|
|
22
|
+
const aNorm = normalizeBytes(a)
|
|
23
|
+
const bNorm = normalizeBytes(b)
|
|
24
|
+
if (aNorm.length !== bNorm.length) {
|
|
25
|
+
return false
|
|
26
|
+
}
|
|
27
|
+
for (let i = 0; i < aNorm.length; i++) {
|
|
28
|
+
if (aNorm[i] !== bNorm[i]) {
|
|
29
|
+
return false
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return true
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Compare returns an integer comparing two byte slices lexicographically.
|
|
36
|
+
export function Compare(a: any, b: any): number {
|
|
37
|
+
const aNorm = normalizeBytes(a)
|
|
38
|
+
const bNorm = normalizeBytes(b)
|
|
39
|
+
const minLen = Math.min(aNorm.length, bNorm.length)
|
|
40
|
+
for (let i = 0; i < minLen; i++) {
|
|
41
|
+
if (aNorm[i] < bNorm[i]) {
|
|
42
|
+
return -1
|
|
43
|
+
}
|
|
44
|
+
if (aNorm[i] > bNorm[i]) {
|
|
45
|
+
return 1
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (aNorm.length < bNorm.length) {
|
|
49
|
+
return -1
|
|
50
|
+
}
|
|
51
|
+
if (aNorm.length > bNorm.length) {
|
|
52
|
+
return 1
|
|
53
|
+
}
|
|
54
|
+
return 0
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Additional functions needed by bytes package
|
|
58
|
+
export function Count(s: any, b: number): number {
|
|
59
|
+
const sNorm = normalizeBytes(s)
|
|
60
|
+
let count = 0
|
|
61
|
+
for (let i = 0; i < sNorm.length; i++) {
|
|
62
|
+
if (sNorm[i] === b) {
|
|
63
|
+
count++
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return count
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function IndexByte(s: any, b: number): number {
|
|
70
|
+
const sNorm = normalizeBytes(s)
|
|
71
|
+
for (let i = 0; i < sNorm.length; i++) {
|
|
72
|
+
if (sNorm[i] === b) {
|
|
73
|
+
return i
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return -1
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function LastIndexByte(s: any, b: number): number {
|
|
80
|
+
const sNorm = normalizeBytes(s)
|
|
81
|
+
for (let i = sNorm.length - 1; i >= 0; i--) {
|
|
82
|
+
if (sNorm[i] === b) {
|
|
83
|
+
return i
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return -1
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function Index(s: any, sep: any): number {
|
|
90
|
+
const sNorm = normalizeBytes(s)
|
|
91
|
+
const sepNorm = normalizeBytes(sep)
|
|
92
|
+
if (sepNorm.length === 0) return 0
|
|
93
|
+
if (sepNorm.length > sNorm.length) return -1
|
|
94
|
+
|
|
95
|
+
for (let i = 0; i <= sNorm.length - sepNorm.length; i++) {
|
|
96
|
+
let found = true
|
|
97
|
+
for (let j = 0; j < sepNorm.length; j++) {
|
|
98
|
+
if (sNorm[i + j] !== sepNorm[j]) {
|
|
99
|
+
found = false
|
|
100
|
+
break
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (found) return i
|
|
104
|
+
}
|
|
105
|
+
return -1
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function LastIndexRabinKarp(s: any, sep: any): number {
|
|
109
|
+
const sNorm = normalizeBytes(s)
|
|
110
|
+
const sepNorm = normalizeBytes(sep)
|
|
111
|
+
// Simple implementation
|
|
112
|
+
for (let i = sNorm.length - sepNorm.length; i >= 0; i--) {
|
|
113
|
+
let found = true
|
|
114
|
+
for (let j = 0; j < sepNorm.length; j++) {
|
|
115
|
+
if (sNorm[i + j] !== sepNorm[j]) {
|
|
116
|
+
found = false
|
|
117
|
+
break
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (found) return i
|
|
121
|
+
}
|
|
122
|
+
return -1
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function IndexRabinKarp(s: any, sep: any): number {
|
|
126
|
+
return Index(s, sep)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export function IndexByteString(s: string, b: number): number {
|
|
130
|
+
const char = String.fromCharCode(b)
|
|
131
|
+
return s.indexOf(char)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export function IndexString(s: string, substr: string): number {
|
|
135
|
+
return s.indexOf(substr)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export function MakeNoZero(n: number): Uint8Array {
|
|
139
|
+
return new Uint8Array(n)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export function Cutover(_n: number): number {
|
|
143
|
+
// TODO: Implement Cutover function
|
|
144
|
+
return 10 // Simple threshold
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Constants needed by bytes package
|
|
148
|
+
export const MaxBruteForce = 64
|
|
149
|
+
export const MaxLen = 32
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as $ from
|
|
1
|
+
import * as $ from '@goscript/builtin/builtin.js'
|
|
2
2
|
|
|
3
3
|
// Stub implementations for internal/byteorder package
|
|
4
4
|
export function LittleEndian(): boolean {
|
|
@@ -19,10 +19,10 @@ export function BEUint64(b: $.Bytes): number {
|
|
|
19
19
|
// For our stub purposes, this should be sufficient
|
|
20
20
|
let high = BEUint32(b)
|
|
21
21
|
let low = BEUint32($.goSlice(b, 4, undefined))
|
|
22
|
-
return
|
|
22
|
+
return high * 0x100000000 + low
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
// Little Endian byte order functions
|
|
25
|
+
// Little Endian byte order functions
|
|
26
26
|
export function LEUint16(b: $.Bytes): number {
|
|
27
27
|
return b![0] | (b![1] << 8)
|
|
28
28
|
}
|
|
@@ -36,5 +36,5 @@ export function LEUint64(b: $.Bytes): number {
|
|
|
36
36
|
// For our stub purposes, this should be sufficient
|
|
37
37
|
let low = LEUint32(b)
|
|
38
38
|
let high = LEUint32($.goSlice(b, 4, undefined))
|
|
39
|
-
return low +
|
|
40
|
-
}
|
|
39
|
+
return low + high * 0x100000000
|
|
40
|
+
}
|
package/gs/math/abs.gs.test.ts
CHANGED
package/gs/math/acosh.gs.test.ts
CHANGED
|
@@ -34,6 +34,8 @@ describe('acosh', () => {
|
|
|
34
34
|
expect(acosh(1)).toBe(Acosh(1))
|
|
35
35
|
expect(acosh(2)).toBe(Acosh(2))
|
|
36
36
|
expect(acosh(10)).toBe(Acosh(10))
|
|
37
|
-
expect(acosh(Number.POSITIVE_INFINITY)).toBe(
|
|
37
|
+
expect(acosh(Number.POSITIVE_INFINITY)).toBe(
|
|
38
|
+
Acosh(Number.POSITIVE_INFINITY),
|
|
39
|
+
)
|
|
38
40
|
})
|
|
39
|
-
})
|
|
41
|
+
})
|
package/gs/math/asin.gs.test.ts
CHANGED
package/gs/math/asinh.gs.test.ts
CHANGED
|
@@ -22,7 +22,9 @@ describe('Asinh', () => {
|
|
|
22
22
|
const resultPos = Asinh(Number.MAX_VALUE)
|
|
23
23
|
expect(resultPos > 700 || resultPos === Number.POSITIVE_INFINITY).toBe(true)
|
|
24
24
|
const resultNeg = Asinh(-Number.MAX_VALUE)
|
|
25
|
-
expect(resultNeg < -700 || resultNeg === Number.NEGATIVE_INFINITY).toBe(
|
|
25
|
+
expect(resultNeg < -700 || resultNeg === Number.NEGATIVE_INFINITY).toBe(
|
|
26
|
+
true,
|
|
27
|
+
)
|
|
26
28
|
expect(Asinh(Number.MIN_VALUE)).toBeCloseTo(Number.MIN_VALUE, 14)
|
|
27
29
|
})
|
|
28
30
|
})
|
|
@@ -32,6 +34,8 @@ describe('asinh', () => {
|
|
|
32
34
|
expect(asinh(0)).toBe(Asinh(0))
|
|
33
35
|
expect(asinh(1)).toBe(Asinh(1))
|
|
34
36
|
expect(asinh(-1)).toBe(Asinh(-1))
|
|
35
|
-
expect(asinh(Number.POSITIVE_INFINITY)).toBe(
|
|
37
|
+
expect(asinh(Number.POSITIVE_INFINITY)).toBe(
|
|
38
|
+
Asinh(Number.POSITIVE_INFINITY),
|
|
39
|
+
)
|
|
36
40
|
})
|
|
37
|
-
})
|
|
41
|
+
})
|
package/gs/math/atan.gs.test.ts
CHANGED
package/gs/math/atan2.gs.test.ts
CHANGED
|
@@ -4,9 +4,9 @@ import { Atan2, atan2 } from './atan2.gs.js'
|
|
|
4
4
|
describe('Atan2', () => {
|
|
5
5
|
it('should return correct arctangent values for basic cases', () => {
|
|
6
6
|
expect(Atan2(1, 1)).toBeCloseTo(Math.PI / 4, 15)
|
|
7
|
-
expect(Atan2(1, -1)).toBeCloseTo(3 * Math.PI / 4, 15)
|
|
7
|
+
expect(Atan2(1, -1)).toBeCloseTo((3 * Math.PI) / 4, 15)
|
|
8
8
|
expect(Atan2(-1, 1)).toBeCloseTo(-Math.PI / 4, 15)
|
|
9
|
-
expect(Atan2(-1, -1)).toBeCloseTo(-3 * Math.PI / 4, 15)
|
|
9
|
+
expect(Atan2(-1, -1)).toBeCloseTo((-3 * Math.PI) / 4, 15)
|
|
10
10
|
})
|
|
11
11
|
|
|
12
12
|
it('should handle zero cases correctly', () => {
|
|
@@ -17,15 +17,23 @@ describe('Atan2', () => {
|
|
|
17
17
|
})
|
|
18
18
|
|
|
19
19
|
it('should handle infinity cases', () => {
|
|
20
|
-
expect(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
expect(
|
|
24
|
-
|
|
20
|
+
expect(
|
|
21
|
+
Atan2(Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY),
|
|
22
|
+
).toBeCloseTo(Math.PI / 4, 15)
|
|
23
|
+
expect(
|
|
24
|
+
Atan2(Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY),
|
|
25
|
+
).toBeCloseTo(-Math.PI / 4, 15)
|
|
26
|
+
expect(
|
|
27
|
+
Atan2(Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY),
|
|
28
|
+
).toBeCloseTo((3 * Math.PI) / 4, 15)
|
|
29
|
+
expect(
|
|
30
|
+
Atan2(Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY),
|
|
31
|
+
).toBeCloseTo((-3 * Math.PI) / 4, 15)
|
|
32
|
+
|
|
25
33
|
expect(Atan2(1, Number.POSITIVE_INFINITY)).toBe(0)
|
|
26
34
|
expect(Atan2(1, Number.NEGATIVE_INFINITY)).toBeCloseTo(Math.PI, 15)
|
|
27
35
|
expect(Atan2(-1, Number.NEGATIVE_INFINITY)).toBeCloseTo(-Math.PI, 15)
|
|
28
|
-
|
|
36
|
+
|
|
29
37
|
expect(Atan2(Number.POSITIVE_INFINITY, 1)).toBeCloseTo(Math.PI / 2, 15)
|
|
30
38
|
expect(Atan2(Number.NEGATIVE_INFINITY, 1)).toBeCloseTo(-Math.PI / 2, 15)
|
|
31
39
|
})
|
|
@@ -52,4 +60,4 @@ describe('atan2', () => {
|
|
|
52
60
|
expect(atan2(-1, -1)).toBe(Atan2(-1, -1))
|
|
53
61
|
expect(atan2(0, 1)).toBe(Atan2(0, 1))
|
|
54
62
|
})
|
|
55
|
-
})
|
|
63
|
+
})
|
package/gs/math/atanh.gs.test.ts
CHANGED
package/gs/math/bits.gs.test.ts
CHANGED
package/gs/math/cbrt.gs.test.ts
CHANGED