goscript 0.0.38 → 0.0.40
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 +15 -6
- package/compiler/compiler.go +184 -34
- package/compiler/expr-call.go +19 -9
- package/compiler/field.go +17 -3
- package/compiler/gs_dependencies_test.go +80 -0
- package/compiler/lit.go +12 -6
- package/compiler/output.go +10 -4
- package/compiler/spec.go +15 -2
- package/compiler/type-assert.go +111 -21
- package/compiler/type.go +37 -8
- package/dist/gs/builtin/builtin.d.ts +55 -0
- package/dist/gs/builtin/builtin.js +213 -0
- package/dist/gs/builtin/builtin.js.map +1 -1
- package/dist/gs/builtin/slice.js +13 -0
- 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 +1107 -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/fmt/fmt.d.ts +49 -0
- package/dist/gs/fmt/fmt.js +322 -0
- package/dist/gs/fmt/fmt.js.map +1 -0
- package/dist/gs/fmt/index.d.ts +1 -0
- package/dist/gs/fmt/index.js +2 -0
- package/dist/gs/fmt/index.js.map +1 -0
- package/dist/gs/internal/bytealg/index.d.ts +14 -2
- package/dist/gs/internal/bytealg/index.js +114 -8
- package/dist/gs/internal/bytealg/index.js.map +1 -1
- package/dist/gs/path/filepath/index.d.ts +3 -0
- package/dist/gs/path/filepath/index.js +3 -0
- package/dist/gs/path/filepath/index.js.map +1 -0
- package/dist/gs/path/filepath/match.d.ts +3 -0
- package/dist/gs/path/filepath/match.js +212 -0
- package/dist/gs/path/filepath/match.js.map +1 -0
- package/dist/gs/path/filepath/path.d.ts +25 -0
- package/dist/gs/path/filepath/path.js +265 -0
- package/dist/gs/path/filepath/path.js.map +1 -0
- package/dist/gs/reflect/deepequal.d.ts +2 -1
- package/dist/gs/reflect/deepequal.js +5 -53
- package/dist/gs/reflect/deepequal.js.map +1 -1
- package/dist/gs/reflect/map.d.ts +14 -8
- package/dist/gs/reflect/map.js +15 -11
- package/dist/gs/reflect/map.js.map +1 -1
- package/dist/gs/reflect/type.d.ts +17 -9
- package/dist/gs/reflect/type.js +1 -1
- package/dist/gs/reflect/type.js.map +1 -1
- package/dist/gs/reflect/value.js +15 -6
- package/dist/gs/reflect/value.js.map +1 -1
- package/dist/gs/reflect/visiblefields.js +18 -12
- package/dist/gs/reflect/visiblefields.js.map +1 -1
- package/dist/gs/sort/index.d.ts +4 -0
- package/dist/gs/sort/index.js +4 -0
- package/dist/gs/sort/index.js.map +1 -0
- package/dist/gs/sort/search.gs.d.ts +6 -0
- package/dist/gs/sort/search.gs.js +125 -0
- package/dist/gs/sort/search.gs.js.map +1 -0
- package/dist/gs/sort/slice.gs.d.ts +4 -0
- package/dist/gs/sort/slice.gs.js +49 -0
- package/dist/gs/sort/slice.gs.js.map +1 -0
- package/dist/gs/sort/sort.gs.d.ts +37 -0
- package/dist/gs/sort/sort.gs.js +203 -0
- package/dist/gs/sort/sort.gs.js.map +1 -0
- 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/gs/builtin/builtin.ts +236 -0
- package/gs/builtin/slice.ts +17 -1
- package/gs/bytes/buffer.gs.ts +614 -0
- package/gs/bytes/bytes.gs.ts +1288 -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/metadata.go +12 -0
- package/gs/bytes/reader.gs.ts +230 -0
- package/gs/fmt/fmt.ts +407 -0
- package/gs/fmt/godoc.txt +382 -0
- package/gs/fmt/index.ts +31 -0
- package/gs/fmt/metadata.go +7 -0
- package/gs/internal/bytealg/index.ts +125 -10
- package/gs/internal/metadata.go +7 -0
- package/gs/io/metadata.go +11 -0
- package/gs/maps/metadata.go +8 -0
- package/gs/math/metadata.go +7 -0
- package/gs/os/metadata.go +17 -0
- package/gs/path/filepath/godoc.txt +35 -0
- package/gs/path/filepath/index.ts +27 -0
- package/gs/path/filepath/match.test.ts +274 -0
- package/gs/path/filepath/match.ts +249 -0
- package/gs/path/filepath/path.test.ts +246 -0
- package/gs/path/filepath/path.ts +328 -0
- package/gs/path/metadata.go +8 -0
- package/gs/reflect/deepequal.test.ts +41 -0
- package/gs/reflect/deepequal.ts +19 -4
- package/gs/reflect/map.test.ts +30 -0
- package/gs/reflect/map.ts +22 -18
- package/gs/reflect/metadata.go +7 -0
- package/gs/reflect/type.ts +19 -15
- package/gs/reflect/value.ts +21 -7
- package/gs/reflect/visiblefields.ts +17 -13
- package/gs/sort/godoc.txt +27 -0
- package/gs/sort/index.ts +24 -0
- package/gs/sort/search.gs.ts +128 -0
- package/gs/sort/slice.gs.ts +59 -0
- package/gs/sort/sort.gs.ts +227 -0
- package/gs/strconv/metadata.go +7 -0
- package/gs/strings/metadata.go +11 -0
- package/gs/sync/metadata.go +7 -0
- package/gs/unicode/utf8/utf8.ts +8 -5
- package/package.json +1 -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
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as $ from '../builtin/builtin.js';
|
|
2
|
+
export interface Interface {
|
|
3
|
+
Len(): number;
|
|
4
|
+
Less(i: number, j: number): boolean;
|
|
5
|
+
Swap(i: number, j: number): void;
|
|
6
|
+
}
|
|
7
|
+
export declare class IntSlice {
|
|
8
|
+
private _value;
|
|
9
|
+
constructor(_value: $.Slice<number>);
|
|
10
|
+
Len(): number;
|
|
11
|
+
Less(i: number, j: number): boolean;
|
|
12
|
+
Swap(i: number, j: number): void;
|
|
13
|
+
}
|
|
14
|
+
export declare class Float64Slice {
|
|
15
|
+
private _value;
|
|
16
|
+
constructor(_value: $.Slice<number>);
|
|
17
|
+
Len(): number;
|
|
18
|
+
Less(i: number, j: number): boolean;
|
|
19
|
+
Swap(i: number, j: number): void;
|
|
20
|
+
}
|
|
21
|
+
export declare class StringSlice {
|
|
22
|
+
private _value;
|
|
23
|
+
constructor(_value: $.Slice<string>);
|
|
24
|
+
Len(): number;
|
|
25
|
+
Less(i: number, j: number): boolean;
|
|
26
|
+
Swap(i: number, j: number): void;
|
|
27
|
+
}
|
|
28
|
+
export declare function Sort(data: Interface): void;
|
|
29
|
+
export declare function Stable(data: Interface): void;
|
|
30
|
+
export declare function IsSorted(data: Interface): boolean;
|
|
31
|
+
export declare function Reverse(data: Interface): Interface;
|
|
32
|
+
export declare function Ints(x: $.Slice<number>): void;
|
|
33
|
+
export declare function IntsAreSorted(x: $.Slice<number>): boolean;
|
|
34
|
+
export declare function Float64s(x: $.Slice<number>): void;
|
|
35
|
+
export declare function Float64sAreSorted(x: $.Slice<number>): boolean;
|
|
36
|
+
export declare function Strings(x: $.Slice<string>): void;
|
|
37
|
+
export declare function StringsAreSorted(x: $.Slice<string>): boolean;
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import * as $ from '../builtin/builtin.js';
|
|
2
|
+
// IntSlice type for sorting integers
|
|
3
|
+
export class IntSlice {
|
|
4
|
+
_value;
|
|
5
|
+
constructor(_value) {
|
|
6
|
+
this._value = _value;
|
|
7
|
+
}
|
|
8
|
+
Len() {
|
|
9
|
+
return $.len(this._value);
|
|
10
|
+
}
|
|
11
|
+
Less(i, j) {
|
|
12
|
+
return $.index(this._value, i) < $.index(this._value, j);
|
|
13
|
+
}
|
|
14
|
+
Swap(i, j) {
|
|
15
|
+
const temp = $.index(this._value, i);
|
|
16
|
+
if (Array.isArray(this._value)) {
|
|
17
|
+
this._value[i] = $.index(this._value, j);
|
|
18
|
+
this._value[j] = temp;
|
|
19
|
+
}
|
|
20
|
+
else if (this._value && typeof this._value === 'object' && '__meta__' in this._value) {
|
|
21
|
+
const meta = this._value.__meta__;
|
|
22
|
+
const backing = meta.backing;
|
|
23
|
+
backing[meta.offset + i] = $.index(this._value, j);
|
|
24
|
+
backing[meta.offset + j] = temp;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Float64Slice type for sorting float64s
|
|
29
|
+
export class Float64Slice {
|
|
30
|
+
_value;
|
|
31
|
+
constructor(_value) {
|
|
32
|
+
this._value = _value;
|
|
33
|
+
}
|
|
34
|
+
Len() {
|
|
35
|
+
return $.len(this._value);
|
|
36
|
+
}
|
|
37
|
+
Less(i, j) {
|
|
38
|
+
return $.index(this._value, i) < $.index(this._value, j);
|
|
39
|
+
}
|
|
40
|
+
Swap(i, j) {
|
|
41
|
+
const temp = $.index(this._value, i);
|
|
42
|
+
if (Array.isArray(this._value)) {
|
|
43
|
+
this._value[i] = $.index(this._value, j);
|
|
44
|
+
this._value[j] = temp;
|
|
45
|
+
}
|
|
46
|
+
else if (this._value && typeof this._value === 'object' && '__meta__' in this._value) {
|
|
47
|
+
const meta = this._value.__meta__;
|
|
48
|
+
const backing = meta.backing;
|
|
49
|
+
backing[meta.offset + i] = $.index(this._value, j);
|
|
50
|
+
backing[meta.offset + j] = temp;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// StringSlice type for sorting strings
|
|
55
|
+
export class StringSlice {
|
|
56
|
+
_value;
|
|
57
|
+
constructor(_value) {
|
|
58
|
+
this._value = _value;
|
|
59
|
+
}
|
|
60
|
+
Len() {
|
|
61
|
+
return $.len(this._value);
|
|
62
|
+
}
|
|
63
|
+
Less(i, j) {
|
|
64
|
+
return $.index(this._value, i) < $.index(this._value, j);
|
|
65
|
+
}
|
|
66
|
+
Swap(i, j) {
|
|
67
|
+
const temp = $.index(this._value, i);
|
|
68
|
+
if (Array.isArray(this._value)) {
|
|
69
|
+
this._value[i] = $.index(this._value, j);
|
|
70
|
+
this._value[j] = temp;
|
|
71
|
+
}
|
|
72
|
+
else if (this._value && typeof this._value === 'object' && '__meta__' in this._value) {
|
|
73
|
+
const meta = this._value.__meta__;
|
|
74
|
+
const backing = meta.backing;
|
|
75
|
+
backing[meta.offset + i] = $.index(this._value, j);
|
|
76
|
+
backing[meta.offset + j] = temp;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Sort sorts data in ascending order as determined by the Less method
|
|
81
|
+
export function Sort(data) {
|
|
82
|
+
// Use a simple insertion sort for now - can be optimized later
|
|
83
|
+
const n = data.Len();
|
|
84
|
+
for (let i = 1; i < n; i++) {
|
|
85
|
+
for (let j = i; j > 0 && data.Less(j, j - 1); j--) {
|
|
86
|
+
data.Swap(j, j - 1);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Stable sorts data while keeping the original order of equal elements
|
|
91
|
+
export function Stable(data) {
|
|
92
|
+
// For simplicity, use the same sort - can be improved later
|
|
93
|
+
Sort(data);
|
|
94
|
+
}
|
|
95
|
+
// IsSorted reports whether data is sorted
|
|
96
|
+
export function IsSorted(data) {
|
|
97
|
+
const n = data.Len();
|
|
98
|
+
for (let i = n - 1; i > 0; i--) {
|
|
99
|
+
if (data.Less(i, i - 1)) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
// Reverse returns the reverse order for data
|
|
106
|
+
export function Reverse(data) {
|
|
107
|
+
return {
|
|
108
|
+
Len: () => data.Len(),
|
|
109
|
+
Less: (i, j) => data.Less(j, i),
|
|
110
|
+
Swap: (i, j) => data.Swap(i, j)
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
// Helper function to swap elements in a slice
|
|
114
|
+
function swapInSlice(slice, i, j) {
|
|
115
|
+
if (!slice)
|
|
116
|
+
return;
|
|
117
|
+
const temp = $.index(slice, i);
|
|
118
|
+
if (Array.isArray(slice)) {
|
|
119
|
+
const val_j = $.index(slice, j);
|
|
120
|
+
const val_i = temp;
|
|
121
|
+
slice[i] = val_j;
|
|
122
|
+
slice[j] = val_i;
|
|
123
|
+
}
|
|
124
|
+
else if (typeof slice === 'object' && '__meta__' in slice) {
|
|
125
|
+
const meta = slice.__meta__;
|
|
126
|
+
const backing = meta.backing;
|
|
127
|
+
backing[meta.offset + i] = $.index(slice, j);
|
|
128
|
+
backing[meta.offset + j] = temp;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Ints sorts a slice of ints in increasing order
|
|
132
|
+
export function Ints(x) {
|
|
133
|
+
if (!x)
|
|
134
|
+
return;
|
|
135
|
+
const n = $.len(x);
|
|
136
|
+
// Simple insertion sort
|
|
137
|
+
for (let i = 1; i < n; i++) {
|
|
138
|
+
for (let j = i; j > 0 && $.index(x, j) < $.index(x, j - 1); j--) {
|
|
139
|
+
swapInSlice(x, j, j - 1);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// IntsAreSorted reports whether the slice x is sorted in increasing order
|
|
144
|
+
export function IntsAreSorted(x) {
|
|
145
|
+
if (!x)
|
|
146
|
+
return true;
|
|
147
|
+
const n = $.len(x);
|
|
148
|
+
for (let i = n - 1; i > 0; i--) {
|
|
149
|
+
if ($.index(x, i) < $.index(x, i - 1)) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
// Float64s sorts a slice of float64s in increasing order
|
|
156
|
+
export function Float64s(x) {
|
|
157
|
+
if (!x)
|
|
158
|
+
return;
|
|
159
|
+
const n = $.len(x);
|
|
160
|
+
// Simple insertion sort
|
|
161
|
+
for (let i = 1; i < n; i++) {
|
|
162
|
+
for (let j = i; j > 0 && $.index(x, j) < $.index(x, j - 1); j--) {
|
|
163
|
+
swapInSlice(x, j, j - 1);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Float64sAreSorted reports whether the slice x is sorted in increasing order
|
|
168
|
+
export function Float64sAreSorted(x) {
|
|
169
|
+
if (!x)
|
|
170
|
+
return true;
|
|
171
|
+
const n = $.len(x);
|
|
172
|
+
for (let i = n - 1; i > 0; i--) {
|
|
173
|
+
if ($.index(x, i) < $.index(x, i - 1)) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
// Strings sorts a slice of strings in increasing order
|
|
180
|
+
export function Strings(x) {
|
|
181
|
+
if (!x)
|
|
182
|
+
return;
|
|
183
|
+
const n = $.len(x);
|
|
184
|
+
// Simple insertion sort
|
|
185
|
+
for (let i = 1; i < n; i++) {
|
|
186
|
+
for (let j = i; j > 0 && $.index(x, j) < $.index(x, j - 1); j--) {
|
|
187
|
+
swapInSlice(x, j, j - 1);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// StringsAreSorted reports whether the slice x is sorted in increasing order
|
|
192
|
+
export function StringsAreSorted(x) {
|
|
193
|
+
if (!x)
|
|
194
|
+
return true;
|
|
195
|
+
const n = $.len(x);
|
|
196
|
+
for (let i = n - 1; i > 0; i--) {
|
|
197
|
+
if ($.index(x, i) < $.index(x, i - 1)) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=sort.gs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort.gs.js","sourceRoot":"","sources":["../../../gs/sort/sort.gs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,uBAAuB,CAAA;AAiB1C,qCAAqC;AACrC,MAAM,OAAO,QAAQ;IACC;IAApB,YAAoB,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAE/C,GAAG;QACD,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED,IAAI,CAAC,CAAS,EAAE,CAAS;QACvB,OAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAY,GAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAY,CAAA;IAClF,CAAC;IAED,IAAI,CAAC,CAAS,EAAE,CAAS;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAW,CAAA;QAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAW,CAAA;YAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;QACvB,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvF,MAAM,IAAI,GAAI,IAAI,CAAC,MAAc,CAAC,QAAiC,CAAA;YACnE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;YAC5B,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAW,CAAA;YAC5D,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAA;QACjC,CAAC;IACH,CAAC;CACF;AAED,yCAAyC;AACzC,MAAM,OAAO,YAAY;IACH;IAApB,YAAoB,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAE/C,GAAG;QACD,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED,IAAI,CAAC,CAAS,EAAE,CAAS;QACvB,OAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAY,GAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAY,CAAA;IAClF,CAAC;IAED,IAAI,CAAC,CAAS,EAAE,CAAS;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAW,CAAA;QAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAW,CAAA;YAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;QACvB,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvF,MAAM,IAAI,GAAI,IAAI,CAAC,MAAc,CAAC,QAAiC,CAAA;YACnE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;YAC5B,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAW,CAAA;YAC5D,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAA;QACjC,CAAC;IACH,CAAC;CACF;AAED,uCAAuC;AACvC,MAAM,OAAO,WAAW;IACF;IAApB,YAAoB,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAE/C,GAAG;QACD,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED,IAAI,CAAC,CAAS,EAAE,CAAS;QACvB,OAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAY,GAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAY,CAAA;IAClF,CAAC;IAED,IAAI,CAAC,CAAS,EAAE,CAAS;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAW,CAAA;QAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAW,CAAA;YAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;QACvB,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvF,MAAM,IAAI,GAAI,IAAI,CAAC,MAAc,CAAC,QAAiC,CAAA;YACnE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;YAC5B,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAW,CAAA;YAC5D,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAA;QACjC,CAAC;IACH,CAAC;CACF;AAED,sEAAsE;AACtE,MAAM,UAAU,IAAI,CAAC,IAAe;IAClC,+DAA+D;IAC/D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,MAAM,CAAC,IAAe;IACpC,4DAA4D;IAC5D,IAAI,CAAC,IAAI,CAAC,CAAA;AACZ,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,QAAQ,CAAC,IAAe;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACxB,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,OAAO,CAAC,IAAe;IACrC,OAAO;QACL,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QACrB,IAAI,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;KAChD,CAAA;AACH,CAAC;AAED,8CAA8C;AAC9C,SAAS,WAAW,CAAI,KAAiB,EAAE,CAAS,EAAE,CAAS;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAM;IAElB,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAA;QAClB,KAAK,CAAC,CAAC,CAAC,GAAG,KAAU,CAAA;QACrB,KAAK,CAAC,CAAC,CAAC,GAAG,KAAU,CAAA;IACvB,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAI,KAAa,CAAC,QAA4B,CAAA;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC5B,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAM,CAAA;QACjD,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAS,CAAA;IACtC,CAAC;AACH,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,IAAI,CAAC,CAAkB;IACrC,IAAI,CAAC,CAAC;QAAE,OAAM;IAEd,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAClB,wBAAwB;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAY,GAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACxF,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,aAAa,CAAC,CAAkB;IAC9C,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAEnB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAY,GAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAY,EAAE,CAAC;YAC9D,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,QAAQ,CAAC,CAAkB;IACzC,IAAI,CAAC,CAAC;QAAE,OAAM;IAEd,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAClB,wBAAwB;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAY,GAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACxF,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,iBAAiB,CAAC,CAAkB;IAClD,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAEnB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAY,GAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAY,EAAE,CAAC;YAC9D,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,OAAO,CAAC,CAAkB;IACxC,IAAI,CAAC,CAAC;QAAE,OAAM;IAEd,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAClB,wBAAwB;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAY,GAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACxF,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAAC,CAAkB;IACjD,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAEnB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAY,GAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAY,EAAE,CAAC;YAC9D,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -6,7 +6,7 @@ export declare const UTFMax = 4;
|
|
|
6
6
|
export declare function AppendRune(p: Uint8Array, r: number): Uint8Array;
|
|
7
7
|
export declare function DecodeLastRune(p: Uint8Array): [number, number];
|
|
8
8
|
export declare function DecodeLastRuneInString(s: string): [number, number];
|
|
9
|
-
export declare function DecodeRune(p:
|
|
9
|
+
export declare function DecodeRune(p: $.Bytes): [number, number];
|
|
10
10
|
export declare function DecodeRuneInString(s: string): [number, number];
|
|
11
11
|
export declare function EncodeRune(p: Uint8Array | $.Slice<number>, r: number): number;
|
|
12
12
|
export declare function FullRune(p: Uint8Array): boolean;
|
|
@@ -51,15 +51,17 @@ export function DecodeLastRuneInString(s) {
|
|
|
51
51
|
}
|
|
52
52
|
// DecodeRune unpacks the first UTF-8 encoding in p and returns the rune and its width in bytes.
|
|
53
53
|
export function DecodeRune(p) {
|
|
54
|
-
if (p
|
|
54
|
+
if (!p?.length) {
|
|
55
55
|
return [RuneError, 0];
|
|
56
56
|
}
|
|
57
57
|
if (p[0] < RuneSelf) {
|
|
58
58
|
return [p[0], 1];
|
|
59
59
|
}
|
|
60
|
+
// Convert p to Uint8Array to satisfy AllowsSharedBufferSource requirement
|
|
61
|
+
const bytes = $.normalizeBytes(p);
|
|
60
62
|
// Convert bytes to string and decode
|
|
61
63
|
const decoder = new TextDecoder('utf-8', { fatal: false });
|
|
62
|
-
const str = decoder.decode(
|
|
64
|
+
const str = decoder.decode(bytes.slice(0, Math.min(4, bytes.length)));
|
|
63
65
|
if (str.length === 0 || str === '\uFFFD') {
|
|
64
66
|
return [RuneError, 1];
|
|
65
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utf8.js","sourceRoot":"","sources":["../../../../gs/unicode/utf8/utf8.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAEpF,OAAO,KAAK,CAAC,MAAM,8BAA8B,CAAA;AAEjD,mEAAmE;AACnE,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAA;AAE/B,+EAA+E;AAC/E,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAA;AAE5B,mDAAmD;AACnD,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAA;AAE/B,8EAA8E;AAC9E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAA;AAEvB,8FAA8F;AAC9F,MAAM,UAAU,UAAU,CAAC,CAAa,EAAE,CAAS;IACjD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;IACnC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC7B,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACb,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;IACtC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,cAAc,CAAC,CAAa;IAC1C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IACvB,CAAC;IAED,0DAA0D;IAC1D,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IACxB,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACzC,KAAK,EAAE,CAAA;IACT,CAAC;IAED,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;IAC5C,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IACvB,CAAC;IACD,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;AAClB,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,sBAAsB,CAAC,CAAS;IAC9C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IACvB,CAAC;IAED,6CAA6C;IAC7C,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IACpB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IACvB,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,SAAS,CAAA;IACtD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACxC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;AACpC,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"utf8.js","sourceRoot":"","sources":["../../../../gs/unicode/utf8/utf8.ts"],"names":[],"mappings":"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"}
|
package/gs/builtin/builtin.ts
CHANGED
|
@@ -209,3 +209,239 @@ export function sortSlice<T extends string | number>(s: Slice<T>): void {
|
|
|
209
209
|
return
|
|
210
210
|
}
|
|
211
211
|
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* bytesEqual efficiently compares two byte slices for equality.
|
|
215
|
+
* Optimized for different byte representations.
|
|
216
|
+
*/
|
|
217
|
+
export function bytesEqual(a: Bytes | null, b: Bytes | null): boolean {
|
|
218
|
+
// Handle null cases
|
|
219
|
+
if (a === null && b === null) return true
|
|
220
|
+
if (a === null || b === null) return false
|
|
221
|
+
|
|
222
|
+
// Convert to arrays for comparison
|
|
223
|
+
const aArr = bytesToArray(a)
|
|
224
|
+
const bArr = bytesToArray(b)
|
|
225
|
+
|
|
226
|
+
if (aArr.length !== bArr.length) return false
|
|
227
|
+
|
|
228
|
+
for (let i = 0; i < aArr.length; i++) {
|
|
229
|
+
if (aArr[i] !== bArr[i]) return false
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return true
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* bytesCompare compares two byte slices lexicographically.
|
|
237
|
+
* Returns -1 if a < b, 0 if a == b, +1 if a > b.
|
|
238
|
+
*/
|
|
239
|
+
export function bytesCompare(a: Bytes | null, b: Bytes | null): number {
|
|
240
|
+
// Handle null cases
|
|
241
|
+
if (a === null && b === null) return 0
|
|
242
|
+
if (a === null) return -1
|
|
243
|
+
if (b === null) return 1
|
|
244
|
+
|
|
245
|
+
const aArr = bytesToArray(a)
|
|
246
|
+
const bArr = bytesToArray(b)
|
|
247
|
+
|
|
248
|
+
const minLen = Math.min(aArr.length, bArr.length)
|
|
249
|
+
|
|
250
|
+
for (let i = 0; i < minLen; i++) {
|
|
251
|
+
if (aArr[i] < bArr[i]) return -1
|
|
252
|
+
if (aArr[i] > bArr[i]) return 1
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
if (aArr.length < bArr.length) return -1
|
|
256
|
+
if (aArr.length > bArr.length) return 1
|
|
257
|
+
return 0
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* bytesToArray converts any Bytes representation to a number array.
|
|
262
|
+
*/
|
|
263
|
+
export function bytesToArray(bytes: Bytes | null): number[] {
|
|
264
|
+
if (bytes === null) return []
|
|
265
|
+
|
|
266
|
+
if (bytes instanceof Uint8Array) {
|
|
267
|
+
return Array.from(bytes)
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
if (Array.isArray(bytes)) {
|
|
271
|
+
return bytes
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// Handle SliceProxy
|
|
275
|
+
if (isSliceProxy(bytes)) {
|
|
276
|
+
const proxy = bytes as SliceProxy<number>
|
|
277
|
+
const meta = proxy.__meta__
|
|
278
|
+
return meta.backing.slice(meta.offset, meta.offset + meta.length)
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
throw new Error(`Cannot convert bytes of type ${typeof bytes} to array`)
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* bytesToUint8Array converts any Bytes representation to a Uint8Array.
|
|
286
|
+
*/
|
|
287
|
+
export function bytesToUint8Array(bytes: Bytes | null): Uint8Array {
|
|
288
|
+
if (bytes === null) return new Uint8Array(0)
|
|
289
|
+
|
|
290
|
+
if (bytes instanceof Uint8Array) {
|
|
291
|
+
return bytes
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
return new Uint8Array(bytesToArray(bytes))
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* bytesIndexOf finds the first occurrence of subslice in bytes.
|
|
299
|
+
* Returns -1 if not found.
|
|
300
|
+
*/
|
|
301
|
+
export function bytesIndexOf(
|
|
302
|
+
bytes: Bytes | null,
|
|
303
|
+
subslice: Bytes | null,
|
|
304
|
+
): number {
|
|
305
|
+
if (bytes === null || subslice === null) return -1
|
|
306
|
+
|
|
307
|
+
const haystack = bytesToArray(bytes)
|
|
308
|
+
const needle = bytesToArray(subslice)
|
|
309
|
+
|
|
310
|
+
if (needle.length === 0) return 0
|
|
311
|
+
if (needle.length > haystack.length) return -1
|
|
312
|
+
|
|
313
|
+
for (let i = 0; i <= haystack.length - needle.length; i++) {
|
|
314
|
+
let found = true
|
|
315
|
+
for (let j = 0; j < needle.length; j++) {
|
|
316
|
+
if (haystack[i + j] !== needle[j]) {
|
|
317
|
+
found = false
|
|
318
|
+
break
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
if (found) return i
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
return -1
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* bytesLastIndexOf finds the last occurrence of subslice in bytes.
|
|
329
|
+
* Returns -1 if not found.
|
|
330
|
+
*/
|
|
331
|
+
export function bytesLastIndexOf(
|
|
332
|
+
bytes: Bytes | null,
|
|
333
|
+
subslice: Bytes | null,
|
|
334
|
+
): number {
|
|
335
|
+
if (bytes === null || subslice === null) return -1
|
|
336
|
+
|
|
337
|
+
const haystack = bytesToArray(bytes)
|
|
338
|
+
const needle = bytesToArray(subslice)
|
|
339
|
+
|
|
340
|
+
if (needle.length === 0) return haystack.length
|
|
341
|
+
if (needle.length > haystack.length) return -1
|
|
342
|
+
|
|
343
|
+
for (let i = haystack.length - needle.length; i >= 0; i--) {
|
|
344
|
+
let found = true
|
|
345
|
+
for (let j = 0; j < needle.length; j++) {
|
|
346
|
+
if (haystack[i + j] !== needle[j]) {
|
|
347
|
+
found = false
|
|
348
|
+
break
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
if (found) return i
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
return -1
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* bytesIndexByte finds the first occurrence of byte c in bytes.
|
|
359
|
+
* Returns -1 if not found.
|
|
360
|
+
*/
|
|
361
|
+
export function bytesIndexByte(bytes: Bytes | null, c: number): number {
|
|
362
|
+
if (bytes === null) return -1
|
|
363
|
+
|
|
364
|
+
const arr = bytesToArray(bytes)
|
|
365
|
+
return arr.indexOf(c)
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* bytesLastIndexByte finds the last occurrence of byte c in bytes.
|
|
370
|
+
* Returns -1 if not found.
|
|
371
|
+
*/
|
|
372
|
+
export function bytesLastIndexByte(bytes: Bytes | null, c: number): number {
|
|
373
|
+
if (bytes === null) return -1
|
|
374
|
+
|
|
375
|
+
const arr = bytesToArray(bytes)
|
|
376
|
+
return arr.lastIndexOf(c)
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* bytesCount counts non-overlapping instances of sep in bytes.
|
|
381
|
+
*/
|
|
382
|
+
export function bytesCount(bytes: Bytes | null, sep: Bytes | null): number {
|
|
383
|
+
if (bytes === null || sep === null) return 0
|
|
384
|
+
|
|
385
|
+
const haystack = bytesToArray(bytes)
|
|
386
|
+
const needle = bytesToArray(sep)
|
|
387
|
+
|
|
388
|
+
if (needle.length === 0) {
|
|
389
|
+
// Special case: empty separator counts code points + 1
|
|
390
|
+
// For now, just return length + 1 (ASCII assumption)
|
|
391
|
+
return haystack.length + 1
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
let count = 0
|
|
395
|
+
let pos = 0
|
|
396
|
+
|
|
397
|
+
while (pos <= haystack.length - needle.length) {
|
|
398
|
+
let found = true
|
|
399
|
+
for (let i = 0; i < needle.length; i++) {
|
|
400
|
+
if (haystack[pos + i] !== needle[i]) {
|
|
401
|
+
found = false
|
|
402
|
+
break
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
if (found) {
|
|
406
|
+
count++
|
|
407
|
+
pos += needle.length
|
|
408
|
+
} else {
|
|
409
|
+
pos++
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
return count
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
// Math functions needed by various packages
|
|
417
|
+
export function min(a: number, b: number): number {
|
|
418
|
+
return Math.min(a, b)
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
export function max(a: number, b: number): number {
|
|
422
|
+
return Math.max(a, b)
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* Converts a rune (number) or string to a string.
|
|
427
|
+
* This is used to replace String.fromCharCode() in Go string(rune) conversions.
|
|
428
|
+
* Since sometimes single-char rune literals are compiled to strings, this function
|
|
429
|
+
* needs to handle both numbers (runes) and strings.
|
|
430
|
+
*
|
|
431
|
+
* @param runeOrString A rune (Unicode code point as number) or a string
|
|
432
|
+
* @returns The resulting string
|
|
433
|
+
*/
|
|
434
|
+
export function runeOrStringToString(runeOrString: number | string): string {
|
|
435
|
+
if (typeof runeOrString === 'string') {
|
|
436
|
+
return runeOrString
|
|
437
|
+
}
|
|
438
|
+
// For numbers, use String.fromCharCode to convert the rune to a string
|
|
439
|
+
return String.fromCharCode(runeOrString)
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
// Panic recovery function (simplified implementation)
|
|
443
|
+
export function recover(): any {
|
|
444
|
+
// In a real implementation, this would interact with Go's panic/recover mechanism
|
|
445
|
+
// For now, return null to indicate no panic was recovered
|
|
446
|
+
return null
|
|
447
|
+
}
|
package/gs/builtin/slice.ts
CHANGED
|
@@ -192,6 +192,11 @@ export const makeSlice = <T>(
|
|
|
192
192
|
// The rest of backingArr (from length to actualCapacity-1) remains uninitialized (undefined),
|
|
193
193
|
// representing available capacity.
|
|
194
194
|
|
|
195
|
+
// OPTIMIZATION: If length equals capacity, return backing array directly
|
|
196
|
+
if (length === actualCapacity) {
|
|
197
|
+
return backingArr as Slice<T>
|
|
198
|
+
}
|
|
199
|
+
|
|
195
200
|
// The proxyTargetArray serves as the shell for the proxy.
|
|
196
201
|
// Its elements up to 'length' should reflect the initialized part of the slice.
|
|
197
202
|
const proxyTargetArray = new Array<T>(length)
|
|
@@ -252,7 +257,7 @@ export const makeSlice = <T>(
|
|
|
252
257
|
},
|
|
253
258
|
}
|
|
254
259
|
|
|
255
|
-
return new Proxy(proxy, handler) as
|
|
260
|
+
return new Proxy(proxy, handler) as unknown as SliceProxy<T>
|
|
256
261
|
}
|
|
257
262
|
|
|
258
263
|
/**
|
|
@@ -454,6 +459,11 @@ export const goSlice = <T>( // T can be number for Uint8Array case
|
|
|
454
459
|
const newLength = high - low
|
|
455
460
|
const newOffset = oldOffset + low
|
|
456
461
|
|
|
462
|
+
// OPTIMIZATION: If the result would have offset=0 and length=capacity, return backing directly
|
|
463
|
+
if (newOffset === 0 && newLength === newCap) {
|
|
464
|
+
return backing as Slice<T>
|
|
465
|
+
}
|
|
466
|
+
|
|
457
467
|
// Create an array-like target with the correct length
|
|
458
468
|
const proxyTargetArray = new Array<T>(newLength)
|
|
459
469
|
// Note: We don't need to initialize the values here since the proxy handler
|
|
@@ -487,6 +497,12 @@ export const arrayToSlice = <T>(
|
|
|
487
497
|
|
|
488
498
|
if (arr.length === 0) return arr
|
|
489
499
|
|
|
500
|
+
// OPTIMIZATION: For arrays where offset=0 and length=capacity, return the array directly
|
|
501
|
+
// if we're not doing deep conversion
|
|
502
|
+
if (depth === 1) {
|
|
503
|
+
return arr as Slice<T>
|
|
504
|
+
}
|
|
505
|
+
|
|
490
506
|
const target = {
|
|
491
507
|
__meta__: {
|
|
492
508
|
backing: arr,
|