goscript 0.0.37 → 0.0.38
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/lit.go +83 -0
- 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/slice.js +2 -1
- package/dist/gs/builtin/slice.js.map +1 -1
- 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 +2 -0
- package/dist/gs/internal/bytealg/index.js +33 -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/abi.d.ts +59 -0
- package/dist/gs/reflect/abi.gs.d.ts +59 -0
- package/dist/gs/reflect/abi.gs.js +79 -0
- package/dist/gs/reflect/abi.gs.js.map +1 -0
- package/dist/gs/reflect/abi.js +79 -0
- package/dist/gs/reflect/abi.js.map +1 -0
- package/dist/gs/reflect/badlinkname.d.ts +52 -0
- package/dist/gs/reflect/badlinkname.gs.d.ts +52 -0
- package/dist/gs/reflect/badlinkname.gs.js +72 -0
- package/dist/gs/reflect/badlinkname.gs.js.map +1 -0
- package/dist/gs/reflect/badlinkname.js +72 -0
- package/dist/gs/reflect/badlinkname.js.map +1 -0
- package/dist/gs/reflect/deepequal.d.ts +1 -0
- package/dist/gs/reflect/deepequal.gs.d.ts +25 -0
- package/dist/gs/reflect/deepequal.gs.js +308 -0
- package/dist/gs/reflect/deepequal.gs.js.map +1 -0
- package/dist/gs/reflect/deepequal.js +139 -0
- package/dist/gs/reflect/deepequal.js.map +1 -0
- package/dist/gs/reflect/float32reg_generic.gs.d.ts +2 -0
- package/dist/gs/reflect/float32reg_generic.gs.js +10 -0
- package/dist/gs/reflect/float32reg_generic.gs.js.map +1 -0
- package/dist/gs/reflect/index.d.ts +8 -0
- package/dist/gs/reflect/index.gs.d.ts +1 -0
- package/dist/gs/reflect/index.gs.js +3 -0
- package/dist/gs/reflect/index.gs.js.map +1 -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.gs.d.ts +3 -0
- package/dist/gs/reflect/iter.gs.js +24 -0
- package/dist/gs/reflect/iter.gs.js.map +1 -0
- package/dist/gs/reflect/iter.js +24 -0
- package/dist/gs/reflect/iter.js.map +1 -0
- package/dist/gs/reflect/makefunc.gs.d.ts +34 -0
- package/dist/gs/reflect/makefunc.gs.js +288 -0
- package/dist/gs/reflect/makefunc.gs.js.map +1 -0
- package/dist/gs/reflect/map.d.ts +14 -0
- package/dist/gs/reflect/map.js +70 -0
- package/dist/gs/reflect/map.js.map +1 -0
- package/dist/gs/reflect/map_swiss.gs.d.ts +14 -0
- package/dist/gs/reflect/map_swiss.gs.js +70 -0
- package/dist/gs/reflect/map_swiss.gs.js.map +1 -0
- package/dist/gs/reflect/reflect.gs.d.ts +132 -0
- package/dist/gs/reflect/reflect.gs.js +437 -0
- package/dist/gs/reflect/reflect.gs.js.map +1 -0
- package/dist/gs/reflect/swapper.d.ts +2 -0
- package/dist/gs/reflect/swapper.gs.d.ts +1 -0
- package/dist/gs/reflect/swapper.gs.js +32 -0
- package/dist/gs/reflect/swapper.gs.js.map +1 -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 +126 -0
- package/dist/gs/reflect/type.gs.d.ts +4 -0
- package/dist/gs/reflect/type.gs.js +21 -0
- package/dist/gs/reflect/type.gs.js.map +1 -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.gs.d.ts +4 -0
- package/dist/gs/reflect/value.gs.js +12 -0
- package/dist/gs/reflect/value.gs.js.map +1 -0
- package/dist/gs/reflect/value.js +201 -0
- package/dist/gs/reflect/value.js.map +1 -0
- package/dist/gs/reflect/visiblefields.d.ts +4 -0
- package/dist/gs/reflect/visiblefields.gs.d.ts +3 -0
- package/dist/gs/reflect/visiblefields.gs.js +123 -0
- package/dist/gs/reflect/visiblefields.gs.js.map +1 -0
- package/dist/gs/reflect/visiblefields.js +143 -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/unsafe/unsafe.js.map +1 -1
- package/gs/builtin/slice.ts +2 -1
- 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 +34 -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.ts +154 -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.ts +81 -0
- package/gs/reflect/swapper.ts +52 -0
- package/gs/reflect/type.ts +1012 -0
- package/gs/reflect/types.ts +214 -0
- package/gs/reflect/value.ts +264 -0
- package/gs/reflect/visiblefields.ts +173 -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/unsafe/unsafe.ts +1 -1
- package/package.json +2 -1
- package/gs/internal/testlog/index.ts +0 -7
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// DeepEqual reports whether x and y are "deeply equal," defined as follows.
|
|
2
|
+
// Two values of identical type are deeply equal if one of the following cases applies.
|
|
3
|
+
// Values of distinct types are never deeply equal.
|
|
4
|
+
//
|
|
5
|
+
// Array values are deeply equal when their corresponding elements are deeply equal.
|
|
6
|
+
//
|
|
7
|
+
// Struct values are deeply equal if their corresponding fields,
|
|
8
|
+
// both exported and unexported, are deeply equal.
|
|
9
|
+
//
|
|
10
|
+
// Func values are deeply equal if both are nil; otherwise they are not deeply equal.
|
|
11
|
+
//
|
|
12
|
+
// Interface values are deeply equal if they hold deeply equal concrete values.
|
|
13
|
+
//
|
|
14
|
+
// Map values are deeply equal when all of the following are true:
|
|
15
|
+
// they are both nil or both non-nil, they have the same length,
|
|
16
|
+
// and either they are the same map object or their corresponding keys
|
|
17
|
+
// (matched using Go equality) map to deeply equal values.
|
|
18
|
+
//
|
|
19
|
+
// Pointer values are deeply equal if they are equal using Go's == operator
|
|
20
|
+
// or if they point to deeply equal values.
|
|
21
|
+
//
|
|
22
|
+
// Slice values are deeply equal when all of the following are true:
|
|
23
|
+
// they are both nil or both non-nil, they have the same length,
|
|
24
|
+
// and either they point to the same initial entry of the same underlying array
|
|
25
|
+
// (that is, &x[0] == &y[0]) or their corresponding elements (up to length) are deeply equal.
|
|
26
|
+
// Note that a non-nil empty slice and a nil slice (for example, []byte{} and []byte(nil))
|
|
27
|
+
// are not deeply equal.
|
|
28
|
+
//
|
|
29
|
+
// Other values - numbers, bools, strings, and channels - are deeply equal
|
|
30
|
+
// if they are equal using Go's == operator.
|
|
31
|
+
//
|
|
32
|
+
// In general DeepEqual is a recursive relaxation of Go's == operator.
|
|
33
|
+
// However, this idea is impossible to implement without some inconsistency.
|
|
34
|
+
// Specifically, it is possible for a value to be unequal to itself,
|
|
35
|
+
// either because it is of func type (uncomparable in general)
|
|
36
|
+
// or because it is a floating-point NaN value (not equal to itself in floating-point comparison),
|
|
37
|
+
// or because it is an array, struct, or interface containing
|
|
38
|
+
// such a value.
|
|
39
|
+
// On the other hand, pointer values are always equal to themselves,
|
|
40
|
+
// even if they point at or contain such problematic values,
|
|
41
|
+
// because they compare equal using Go's == operator, and that
|
|
42
|
+
// is a sufficient condition to be deeply equal, regardless of content.
|
|
43
|
+
// DeepEqual has been defined so that the same short-cut applies
|
|
44
|
+
// to slices and maps: if x and y are the same slice or the same map,
|
|
45
|
+
// they are deeply equal regardless of content.
|
|
46
|
+
//
|
|
47
|
+
// As DeepEqual traverses the data values it may find a cycle. The
|
|
48
|
+
// second and subsequent times that DeepEqual compares two pointer
|
|
49
|
+
// values that have been compared before, it treats the values as
|
|
50
|
+
// equal rather than examining the values to which they point.
|
|
51
|
+
// This ensures that DeepEqual terminates.
|
|
52
|
+
export function DeepEqual(x, y) {
|
|
53
|
+
// Handle null/undefined cases
|
|
54
|
+
if (x === y) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
if (x === null || y === null || x === undefined || y === undefined) {
|
|
58
|
+
return x === y;
|
|
59
|
+
}
|
|
60
|
+
// Check for identical references first
|
|
61
|
+
if (x === y) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
// Different types are never equal
|
|
65
|
+
if (typeof x !== typeof y) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
// Handle arrays (including GoScript slices)
|
|
69
|
+
if (globalThis.Array.isArray(x) && globalThis.Array.isArray(y)) {
|
|
70
|
+
if (x.length !== y.length) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
for (let i = 0; i < x.length; i++) {
|
|
74
|
+
if (!DeepEqual(x[i], y[i])) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
// Handle GoScript slice objects with __meta__ structure
|
|
81
|
+
if (x && y && typeof x === 'object' && typeof y === 'object') {
|
|
82
|
+
// Check if both are GoScript slices
|
|
83
|
+
if ('__meta__' in x && '__meta__' in y) {
|
|
84
|
+
const xMeta = x.__meta__;
|
|
85
|
+
const yMeta = y.__meta__;
|
|
86
|
+
if (xMeta &&
|
|
87
|
+
yMeta &&
|
|
88
|
+
'backing' in xMeta &&
|
|
89
|
+
'backing' in yMeta &&
|
|
90
|
+
'length' in xMeta &&
|
|
91
|
+
'length' in yMeta &&
|
|
92
|
+
globalThis.Array.isArray(xMeta.backing) &&
|
|
93
|
+
globalThis.Array.isArray(yMeta.backing) &&
|
|
94
|
+
typeof xMeta.length === 'number' &&
|
|
95
|
+
typeof yMeta.length === 'number') {
|
|
96
|
+
// Compare lengths
|
|
97
|
+
if (xMeta.length !== yMeta.length) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
// Compare elements
|
|
101
|
+
for (let i = 0; i < xMeta.length; i++) {
|
|
102
|
+
if (!DeepEqual(xMeta.backing[i], yMeta.backing[i])) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Handle Maps
|
|
111
|
+
if (x instanceof globalThis.Map && y instanceof globalThis.Map) {
|
|
112
|
+
if (x.size !== y.size) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
for (const [key, value] of x) {
|
|
116
|
+
if (!y.has(key) || !DeepEqual(value, y.get(key))) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
// Handle objects (structs)
|
|
123
|
+
if (typeof x === 'object' && typeof y === 'object') {
|
|
124
|
+
const keysX = Object.keys(x);
|
|
125
|
+
const keysY = Object.keys(y);
|
|
126
|
+
if (keysX.length !== keysY.length) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
for (const key of keysX) {
|
|
130
|
+
if (!keysY.includes(key) || !DeepEqual(x[key], y[key])) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
// For primitive values, use direct comparison
|
|
137
|
+
return x === y;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=deepequal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepequal.js","sourceRoot":"","sources":["../../../gs/reflect/deepequal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Stub implementations for float32 register operations
|
|
2
|
+
export function archFloat32FromReg(i) {
|
|
3
|
+
// Simple stub - just return the number as-is
|
|
4
|
+
return i;
|
|
5
|
+
}
|
|
6
|
+
export function archFloat32ToReg(val) {
|
|
7
|
+
// Simple stub - just return the number as-is
|
|
8
|
+
return val;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=float32reg_generic.gs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"float32reg_generic.gs.js","sourceRoot":"","sources":["../../../gs/reflect/float32reg_generic.gs.ts"],"names":[],"mappings":"AAEA,uDAAuD;AACvD,MAAM,UAAU,kBAAkB,CAAC,CAAS;IAC3C,6CAA6C;IAC7C,OAAO,CAAC,CAAC;AACV,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC3C,+CAA+C;IAC/C,OAAO,GAAG,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { TypeOf, ValueOf, Value, Kind, ArrayOf, SliceOf, PointerTo, PtrTo, MapOf, ChanOf, } from './type';
|
|
2
|
+
export type { Type } from './type';
|
|
3
|
+
export { DeepEqual } from './deepequal';
|
|
4
|
+
export { Zero, Copy, Indirect, New, MakeSlice, MakeMap, Append, MakeChan, Select, } from './value';
|
|
5
|
+
export { Swapper } from './swapper';
|
|
6
|
+
export { ChanDir, RecvDir, SendDir, BothDir, StructTag, ValueError, SelectDir, SelectSend, SelectRecv, SelectDefault, bitVector, } from './types';
|
|
7
|
+
export type { uintptr, Pointer, StructField, Method, SelectCase, SliceHeader, StringHeader, MapIter, } from './types';
|
|
8
|
+
export { Invalid, Bool, Int, Int8, Int16, Int32, Int64, Uint, Uint8, Uint16, Uint32, Uint64, Uintptr, Float32, Float64, Complex64, Complex128, Array, Chan, Func, Interface, Map, Ptr, Slice, String, Struct, UnsafePointer, } from './type';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { TypeOf, ValueOf, DeepEqual, Zero, Kind, Type, Value } from "./reflect.gs.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.gs.js","sourceRoot":"","sources":["../../../gs/reflect/index.gs.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAQ,KAAK,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Export the main reflect functions organized like Go stdlib
|
|
2
|
+
export { TypeOf, ValueOf, Value, Kind, ArrayOf, SliceOf, PointerTo, PtrTo, MapOf, ChanOf, } from './type';
|
|
3
|
+
export { DeepEqual } from './deepequal';
|
|
4
|
+
export { Zero, Copy, Indirect, New, MakeSlice, MakeMap, Append, MakeChan, Select, } from './value';
|
|
5
|
+
export { Swapper } from './swapper';
|
|
6
|
+
// Export new types and constants
|
|
7
|
+
export { ChanDir, RecvDir, SendDir, BothDir, StructTag, ValueError, SelectDir, SelectSend, SelectRecv, SelectDefault, bitVector, } from './types';
|
|
8
|
+
// Export kind constants
|
|
9
|
+
export { Invalid, Bool, Int, Int8, Int16, Int32, Int64, Uint, Uint8, Uint16, Uint32, Uint64, Uintptr, Float32, Float64, Complex64, Complex128, Array, Chan, Func, Interface, Map, Ptr, Slice, String, Struct, UnsafePointer, } from './type';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../gs/reflect/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,OAAO,EACL,MAAM,EACN,OAAO,EACP,KAAK,EACL,IAAI,EACJ,OAAO,EACP,OAAO,EACP,SAAS,EACT,KAAK,EACL,KAAK,EACL,MAAM,GACP,MAAM,QAAQ,CAAA;AAEf,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,EACR,MAAM,GACP,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,iCAAiC;AACjC,OAAO,EACL,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,SAAS,EACT,UAAU,EACV,SAAS,EACT,UAAU,EACV,UAAU,EACV,aAAa,EACb,SAAS,GACV,MAAM,SAAS,CAAA;AAYhB,wBAAwB;AACxB,OAAO,EACL,OAAO,EACP,IAAI,EACJ,GAAG,EACH,IAAI,EACJ,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,KAAK,EACL,MAAM,EACN,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EACP,SAAS,EACT,UAAU,EACV,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,GAAG,EACH,GAAG,EACH,KAAK,EACL,MAAM,EACN,MAAM,EACN,aAAa,GACd,MAAM,QAAQ,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Type, Value } from './type.js';
|
|
2
|
+
import { uintptr } from './types.js';
|
|
3
|
+
import * as iter from '@goscript/iter/index.js';
|
|
4
|
+
export declare function rangeNum<T extends number | number | number | number | number | number | number | number | number | number | uintptr, N extends number | number>(num: N, t: Type): iter.Seq<Value>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Type, Value, uintptr } from "./reflect.gs.js";
|
|
2
|
+
import * as iter from "@goscript/iter/index.js";
|
|
3
|
+
export declare function rangeNum<T extends number | number | number | number | number | number | number | number | number | number | uintptr, N extends number | number>(num: N, t: Type): iter.Seq<Value>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ValueOf } from "./value.gs.js";
|
|
2
|
+
export function rangeNum(num, t) {
|
|
3
|
+
// cannot use range T(v) because no core type.
|
|
4
|
+
// if the iteration value type is define by
|
|
5
|
+
// type T built-in type.
|
|
6
|
+
return (_yield) => {
|
|
7
|
+
let convert = t.PkgPath() != "";
|
|
8
|
+
// cannot use range T(v) because no core type.
|
|
9
|
+
// if the iteration value type is define by
|
|
10
|
+
// type T built-in type.
|
|
11
|
+
for (let i = 0; i < num; i++) {
|
|
12
|
+
let tmp = ValueOf(i).clone();
|
|
13
|
+
// if the iteration value type is define by
|
|
14
|
+
// type T built-in type.
|
|
15
|
+
if (convert) {
|
|
16
|
+
tmp = tmp.Convert(t).clone();
|
|
17
|
+
}
|
|
18
|
+
if (!_yield(tmp)) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=iter.gs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iter.gs.js","sourceRoot":"","sources":["../../../gs/reflect/iter.gs.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIxC,MAAM,UAAU,QAAQ,CAAyI,GAAM,EAAE,CAAO;IAE/K,8CAA8C;IAE9C,2CAA2C;IAC3C,wBAAwB;IACxB,OAAO,CAAC,MAAsC,EAAQ,EAAE;QACvD,IAAI,OAAO,GAAG,CAAE,CAAC,OAAQ,EAAE,IAAI,EAAE,CAAA;QACjC,8CAA8C;QAE9C,2CAA2C;QAC3C,wBAAwB;QACxB,KAAK,IAAI,CAAC,GAAI,CAAkB,EAAE,CAAC,GAAI,GAAoB,EAAE,CAAC,EAAE,EAAE,CAAC;YAClE,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;YAC5B,2CAA2C;YAC3C,wBAAwB;YACxB,IAAI,OAAO,EAAE,CAAC;gBACb,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;YAC7B,CAAC;YACD,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,OAAM;YACP,CAAC;QACF,CAAC;IACF,CAAC,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ValueOf } from './value.js';
|
|
2
|
+
export function rangeNum(num, t) {
|
|
3
|
+
// cannot use range T(v) because no core type.
|
|
4
|
+
// if the iteration value type is define by
|
|
5
|
+
// type T built-in type.
|
|
6
|
+
return (_yield) => {
|
|
7
|
+
let convert = t.PkgPath() != '';
|
|
8
|
+
// cannot use range T(v) because no core type.
|
|
9
|
+
// if the iteration value type is define by
|
|
10
|
+
// type T built-in type.
|
|
11
|
+
for (let i = 0; i < num; i++) {
|
|
12
|
+
let tmp = ValueOf(i).clone();
|
|
13
|
+
// if the iteration value type is define by
|
|
14
|
+
// type T built-in type.
|
|
15
|
+
if (convert) {
|
|
16
|
+
tmp = tmp.Convert(t).clone();
|
|
17
|
+
}
|
|
18
|
+
if (!_yield(tmp)) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=iter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iter.js","sourceRoot":"","sources":["../../../gs/reflect/iter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAIpC,MAAM,UAAU,QAAQ,CActB,GAAM,EAAE,CAAO;IACf,8CAA8C;IAE9C,2CAA2C;IAC3C,wBAAwB;IACxB,OAAO,CAAC,MAAsC,EAAQ,EAAE;QACtD,IAAI,OAAO,GAAG,CAAE,CAAC,OAAQ,EAAE,IAAI,EAAE,CAAA;QACjC,8CAA8C;QAE9C,2CAA2C;QAC3C,wBAAwB;QACxB,KAAK,IAAI,CAAC,GAAG,CAAiB,EAAE,CAAC,GAAI,GAAoB,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/D,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;YAC5B,2CAA2C;YAC3C,wBAAwB;YACxB,IAAI,OAAO,EAAE,CAAC;gBACZ,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;YAC9B,CAAC;YACD,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClB,OAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as $ from "@goscript/builtin/builtin.js";
|
|
2
|
+
import { Type, Value, uintptr, bitVector } from "./reflect.gs.js";
|
|
3
|
+
import * as abi from "@goscript/internal/abi/index.js";
|
|
4
|
+
export declare function MakeFunc(typ: Type, fn: ((args: $.Slice<Value>) => $.Slice<Value>) | null): Value;
|
|
5
|
+
export declare function makeFuncStub(): void;
|
|
6
|
+
export declare function makeMethodValue(op: string, v: Value): Value;
|
|
7
|
+
export declare function methodValueCallCodePtr(): uintptr;
|
|
8
|
+
export declare function methodValueCall(): void;
|
|
9
|
+
declare class makeFuncCtxt {
|
|
10
|
+
get fn(): uintptr;
|
|
11
|
+
set fn(value: uintptr);
|
|
12
|
+
get stack(): bitVector | null;
|
|
13
|
+
set stack(value: bitVector | null);
|
|
14
|
+
get argLen(): uintptr;
|
|
15
|
+
set argLen(value: uintptr);
|
|
16
|
+
get regPtrs(): abi.IntArgRegBitmap;
|
|
17
|
+
set regPtrs(value: abi.IntArgRegBitmap);
|
|
18
|
+
_fields: {
|
|
19
|
+
fn: $.VarRef<uintptr>;
|
|
20
|
+
stack: $.VarRef<bitVector | null>;
|
|
21
|
+
argLen: $.VarRef<uintptr>;
|
|
22
|
+
regPtrs: $.VarRef<abi.IntArgRegBitmap>;
|
|
23
|
+
};
|
|
24
|
+
constructor(init?: Partial<{
|
|
25
|
+
argLen?: uintptr;
|
|
26
|
+
fn?: uintptr;
|
|
27
|
+
regPtrs?: abi.IntArgRegBitmap;
|
|
28
|
+
stack?: bitVector | null;
|
|
29
|
+
}>);
|
|
30
|
+
clone(): makeFuncCtxt;
|
|
31
|
+
static __typeInfo: $.StructTypeInfo;
|
|
32
|
+
}
|
|
33
|
+
export declare function moveMakeFuncArgPtrs(ctxt: makeFuncCtxt | null, args: abi.RegArgs | null): void;
|
|
34
|
+
export {};
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import * as $ from "@goscript/builtin/builtin.js";
|
|
2
|
+
import { Value, uintptr, funcType, flag } from "./reflect.gs.js";
|
|
3
|
+
import { methodReceiver } from "./value.gs.js";
|
|
4
|
+
import * as abi from "@goscript/internal/abi/index.js";
|
|
5
|
+
import * as unsafe from "@goscript/unsafe/index.js";
|
|
6
|
+
import { funcLayout } from "./type.gs.js";
|
|
7
|
+
class makeFuncImpl {
|
|
8
|
+
get ftyp() {
|
|
9
|
+
return this._fields.ftyp.value;
|
|
10
|
+
}
|
|
11
|
+
set ftyp(value) {
|
|
12
|
+
this._fields.ftyp.value = value;
|
|
13
|
+
}
|
|
14
|
+
get fn() {
|
|
15
|
+
return this._fields.fn.value;
|
|
16
|
+
}
|
|
17
|
+
set fn(value) {
|
|
18
|
+
this._fields.fn.value = value;
|
|
19
|
+
}
|
|
20
|
+
get makeFuncCtxt() {
|
|
21
|
+
return this._fields.makeFuncCtxt.value;
|
|
22
|
+
}
|
|
23
|
+
set makeFuncCtxt(value) {
|
|
24
|
+
this._fields.makeFuncCtxt.value = value;
|
|
25
|
+
}
|
|
26
|
+
_fields;
|
|
27
|
+
constructor(init) {
|
|
28
|
+
this._fields = {
|
|
29
|
+
makeFuncCtxt: $.varRef(new makeFuncCtxt(init?.makeFuncCtxt)),
|
|
30
|
+
ftyp: $.varRef(init?.ftyp ?? null),
|
|
31
|
+
fn: $.varRef(init?.fn ?? null)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
clone() {
|
|
35
|
+
const cloned = new makeFuncImpl();
|
|
36
|
+
cloned._fields = {
|
|
37
|
+
makeFuncCtxt: $.varRef(this._fields.makeFuncCtxt.value.clone()),
|
|
38
|
+
ftyp: $.varRef(this._fields.ftyp.value),
|
|
39
|
+
fn: $.varRef(this._fields.fn.value)
|
|
40
|
+
};
|
|
41
|
+
return cloned;
|
|
42
|
+
}
|
|
43
|
+
get stack() {
|
|
44
|
+
return this.makeFuncCtxt.stack;
|
|
45
|
+
}
|
|
46
|
+
set stack(value) {
|
|
47
|
+
this.makeFuncCtxt.stack = value;
|
|
48
|
+
}
|
|
49
|
+
get argLen() {
|
|
50
|
+
return this.makeFuncCtxt.argLen;
|
|
51
|
+
}
|
|
52
|
+
set argLen(value) {
|
|
53
|
+
this.makeFuncCtxt.argLen = value;
|
|
54
|
+
}
|
|
55
|
+
get regPtrs() {
|
|
56
|
+
return this.makeFuncCtxt.regPtrs;
|
|
57
|
+
}
|
|
58
|
+
set regPtrs(value) {
|
|
59
|
+
this.makeFuncCtxt.regPtrs = value;
|
|
60
|
+
}
|
|
61
|
+
// Register this type with the runtime type system
|
|
62
|
+
static __typeInfo = $.registerStructType('makeFuncImpl', new makeFuncImpl(), [], makeFuncImpl, { "makeFuncCtxt": "makeFuncCtxt", "ftyp": { kind: $.TypeKind.Pointer, elemType: { kind: $.TypeKind.Struct, fields: { "Type": "Type", "InCount": { kind: $.TypeKind.Basic, name: "number" }, "OutCount": { kind: $.TypeKind.Basic, name: "number" } }, methods: [] } }, "fn": { kind: $.TypeKind.Function, params: [{ kind: $.TypeKind.Slice, elemType: "Value" }], results: [{ kind: $.TypeKind.Slice, elemType: "Value" }] } });
|
|
63
|
+
}
|
|
64
|
+
// MakeFunc returns a new function of the given [Type]
|
|
65
|
+
// that wraps the function fn. When called, that new function
|
|
66
|
+
// does the following:
|
|
67
|
+
//
|
|
68
|
+
// - converts its arguments to a slice of Values.
|
|
69
|
+
// - runs results := fn(args).
|
|
70
|
+
// - returns the results as a slice of Values, one per formal result.
|
|
71
|
+
//
|
|
72
|
+
// The implementation fn can assume that the argument [Value] slice
|
|
73
|
+
// has the number and type of arguments given by typ.
|
|
74
|
+
// If typ describes a variadic function, the final Value is itself
|
|
75
|
+
// a slice representing the variadic arguments, as in the
|
|
76
|
+
// body of a variadic function. The result Value slice returned by fn
|
|
77
|
+
// must have the number and type of results given by typ.
|
|
78
|
+
//
|
|
79
|
+
// The [Value.Call] method allows the caller to invoke a typed function
|
|
80
|
+
// in terms of Values; in contrast, MakeFunc allows the caller to implement
|
|
81
|
+
// a typed function in terms of Values.
|
|
82
|
+
//
|
|
83
|
+
// The Examples section of the documentation includes an illustration
|
|
84
|
+
// of how to use MakeFunc to build a swap function for different types.
|
|
85
|
+
export function MakeFunc(typ, fn) {
|
|
86
|
+
if (typ.Kind().valueOf() != 19) {
|
|
87
|
+
$.panic("reflect: MakeFunc of non-func type");
|
|
88
|
+
}
|
|
89
|
+
let t = typ.common();
|
|
90
|
+
let ftyp = new funcType(typ.Kind());
|
|
91
|
+
let code = abi.FuncPCABI0(makeFuncStub);
|
|
92
|
+
// makeFuncImpl contains a stack map for use by the runtime
|
|
93
|
+
let [, , abid] = funcLayout(ftyp, null);
|
|
94
|
+
let impl = new makeFuncImpl({ fn: fn, ftyp: { Type: typ, InCount: 0, OutCount: 0 }, makeFuncCtxt: { fn: code, stack: abid.stackPtrs, argLen: abid.stackCallArgsSize, regPtrs: abid.inRegPtrs } });
|
|
95
|
+
return new Value({});
|
|
96
|
+
}
|
|
97
|
+
// makeFuncStub is an assembly function that is the code half of
|
|
98
|
+
// the function returned from MakeFunc. It expects a *callReflectFunc
|
|
99
|
+
// as its context register, and its job is to invoke callReflect(ctxt, frame)
|
|
100
|
+
// where ctxt is the context register and frame is a pointer to the first
|
|
101
|
+
// word in the passed-in argument frame.
|
|
102
|
+
export function makeFuncStub() { }
|
|
103
|
+
class methodValue {
|
|
104
|
+
get method() {
|
|
105
|
+
return this._fields.method.value;
|
|
106
|
+
}
|
|
107
|
+
set method(value) {
|
|
108
|
+
this._fields.method.value = value;
|
|
109
|
+
}
|
|
110
|
+
get rcvr() {
|
|
111
|
+
return this._fields.rcvr.value;
|
|
112
|
+
}
|
|
113
|
+
set rcvr(value) {
|
|
114
|
+
this._fields.rcvr.value = value;
|
|
115
|
+
}
|
|
116
|
+
get makeFuncCtxt() {
|
|
117
|
+
return this._fields.makeFuncCtxt.value;
|
|
118
|
+
}
|
|
119
|
+
set makeFuncCtxt(value) {
|
|
120
|
+
this._fields.makeFuncCtxt.value = value;
|
|
121
|
+
}
|
|
122
|
+
_fields;
|
|
123
|
+
constructor(init) {
|
|
124
|
+
this._fields = {
|
|
125
|
+
makeFuncCtxt: $.varRef(new makeFuncCtxt(init?.makeFuncCtxt)),
|
|
126
|
+
method: $.varRef(init?.method ?? 0),
|
|
127
|
+
rcvr: $.varRef(init?.rcvr?.clone() ?? new Value())
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
clone() {
|
|
131
|
+
const cloned = new methodValue();
|
|
132
|
+
cloned._fields = {
|
|
133
|
+
makeFuncCtxt: $.varRef(this._fields.makeFuncCtxt.value.clone()),
|
|
134
|
+
method: $.varRef(this._fields.method.value),
|
|
135
|
+
rcvr: $.varRef(this._fields.rcvr.value?.clone() ?? null)
|
|
136
|
+
};
|
|
137
|
+
return cloned;
|
|
138
|
+
}
|
|
139
|
+
get fn() {
|
|
140
|
+
return this.makeFuncCtxt.fn;
|
|
141
|
+
}
|
|
142
|
+
set fn(value) {
|
|
143
|
+
this.makeFuncCtxt.fn = value;
|
|
144
|
+
}
|
|
145
|
+
get stack() {
|
|
146
|
+
return this.makeFuncCtxt.stack;
|
|
147
|
+
}
|
|
148
|
+
set stack(value) {
|
|
149
|
+
this.makeFuncCtxt.stack = value;
|
|
150
|
+
}
|
|
151
|
+
get argLen() {
|
|
152
|
+
return this.makeFuncCtxt.argLen;
|
|
153
|
+
}
|
|
154
|
+
set argLen(value) {
|
|
155
|
+
this.makeFuncCtxt.argLen = value;
|
|
156
|
+
}
|
|
157
|
+
get regPtrs() {
|
|
158
|
+
return this.makeFuncCtxt.regPtrs;
|
|
159
|
+
}
|
|
160
|
+
set regPtrs(value) {
|
|
161
|
+
this.makeFuncCtxt.regPtrs = value;
|
|
162
|
+
}
|
|
163
|
+
// Register this type with the runtime type system
|
|
164
|
+
static __typeInfo = $.registerStructType('methodValue', new methodValue(), [], methodValue, { "makeFuncCtxt": "makeFuncCtxt", "method": { kind: $.TypeKind.Basic, name: "number" }, "rcvr": "Value" });
|
|
165
|
+
}
|
|
166
|
+
// makeMethodValue converts v from the rcvr+method index representation
|
|
167
|
+
// of a method value to an actual method func value, which is
|
|
168
|
+
// basically the receiver value with a special bit set, into a true
|
|
169
|
+
// func value - a value holding an actual func. The output is
|
|
170
|
+
// semantically equivalent to the input as far as the user of package
|
|
171
|
+
// reflect can tell, but the true func representation can be handled
|
|
172
|
+
// by code like Convert and Interface and Assign.
|
|
173
|
+
export function makeMethodValue(op, v) {
|
|
174
|
+
if ((v.flag & 512) == 0) {
|
|
175
|
+
$.panic("reflect: internal error: invalid use of makeMethodValue");
|
|
176
|
+
}
|
|
177
|
+
// Ignoring the flagMethod bit, v describes the receiver, not the method type.
|
|
178
|
+
let fl = (v.flag & (((96 | 256) | 128)));
|
|
179
|
+
fl |= flag.from(v.typ().Kind()).valueOf();
|
|
180
|
+
let rcvr = new Value({});
|
|
181
|
+
// v.Type returns the actual type of the method value.
|
|
182
|
+
let ftyp = new funcType(v.typ().Kind());
|
|
183
|
+
let code = methodValueCallCodePtr();
|
|
184
|
+
// methodValue contains a stack map for use by the runtime
|
|
185
|
+
let [, , abid] = funcLayout(ftyp, null);
|
|
186
|
+
let fv = new methodValue({ method: ($.int(v.flag) >> 10), rcvr: rcvr, makeFuncCtxt: { fn: code, stack: abid.stackPtrs, argLen: abid.stackCallArgsSize, regPtrs: abid.inRegPtrs } });
|
|
187
|
+
// Cause panic if method is not appropriate.
|
|
188
|
+
// The panic would still happen during the call if we omit this,
|
|
189
|
+
// but we want Interface() and other operations to fail early.
|
|
190
|
+
methodReceiver(op, fv.rcvr, fv.method);
|
|
191
|
+
return new Value({});
|
|
192
|
+
}
|
|
193
|
+
export function methodValueCallCodePtr() {
|
|
194
|
+
return abi.FuncPCABI0(methodValueCall);
|
|
195
|
+
}
|
|
196
|
+
// methodValueCall is an assembly function that is the code half of
|
|
197
|
+
// the function returned from makeMethodValue. It expects a *methodValue
|
|
198
|
+
// as its context register, and its job is to invoke callMethod(ctxt, frame)
|
|
199
|
+
// where ctxt is the context register and frame is a pointer to the first
|
|
200
|
+
// word in the passed-in argument frame.
|
|
201
|
+
export function methodValueCall() { }
|
|
202
|
+
class makeFuncCtxt {
|
|
203
|
+
get fn() {
|
|
204
|
+
return this._fields.fn.value;
|
|
205
|
+
}
|
|
206
|
+
set fn(value) {
|
|
207
|
+
this._fields.fn.value = value;
|
|
208
|
+
}
|
|
209
|
+
// ptrmap for both stack args and results
|
|
210
|
+
get stack() {
|
|
211
|
+
return this._fields.stack.value;
|
|
212
|
+
}
|
|
213
|
+
set stack(value) {
|
|
214
|
+
this._fields.stack.value = value;
|
|
215
|
+
}
|
|
216
|
+
// just args
|
|
217
|
+
get argLen() {
|
|
218
|
+
return this._fields.argLen.value;
|
|
219
|
+
}
|
|
220
|
+
set argLen(value) {
|
|
221
|
+
this._fields.argLen.value = value;
|
|
222
|
+
}
|
|
223
|
+
get regPtrs() {
|
|
224
|
+
return this._fields.regPtrs.value;
|
|
225
|
+
}
|
|
226
|
+
set regPtrs(value) {
|
|
227
|
+
this._fields.regPtrs.value = value;
|
|
228
|
+
}
|
|
229
|
+
_fields;
|
|
230
|
+
constructor(init) {
|
|
231
|
+
this._fields = {
|
|
232
|
+
fn: $.varRef(init?.fn ?? 0),
|
|
233
|
+
stack: $.varRef(init?.stack ?? null),
|
|
234
|
+
argLen: $.varRef(init?.argLen ?? 0),
|
|
235
|
+
regPtrs: $.varRef(init?.regPtrs ?? new abi.IntArgRegBitmap())
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
clone() {
|
|
239
|
+
const cloned = new makeFuncCtxt();
|
|
240
|
+
cloned._fields = {
|
|
241
|
+
fn: $.varRef(this._fields.fn.value),
|
|
242
|
+
stack: $.varRef(this._fields.stack.value),
|
|
243
|
+
argLen: $.varRef(this._fields.argLen.value),
|
|
244
|
+
regPtrs: $.varRef(this._fields.regPtrs.value)
|
|
245
|
+
};
|
|
246
|
+
return cloned;
|
|
247
|
+
}
|
|
248
|
+
// Register this type with the runtime type system
|
|
249
|
+
static __typeInfo = $.registerStructType('makeFuncCtxt', new makeFuncCtxt(), [], makeFuncCtxt, { "fn": { kind: $.TypeKind.Basic, name: "uintptr" }, "stack": { kind: $.TypeKind.Pointer, elemType: "bitVector" }, "argLen": { kind: $.TypeKind.Basic, name: "uintptr" }, "regPtrs": "IntArgRegBitmap" });
|
|
250
|
+
}
|
|
251
|
+
// moveMakeFuncArgPtrs uses ctxt.regPtrs to copy integer pointer arguments
|
|
252
|
+
// in args.Ints to args.Ptrs where the GC can see them.
|
|
253
|
+
//
|
|
254
|
+
// This is similar to what reflectcallmove does in the runtime, except
|
|
255
|
+
// that happens on the return path, whereas this happens on the call path.
|
|
256
|
+
//
|
|
257
|
+
// nosplit because pointers are being held in uintptr slots in args, so
|
|
258
|
+
// having our stack scanned now could lead to accidentally freeing
|
|
259
|
+
// memory.
|
|
260
|
+
//
|
|
261
|
+
//go:nosplit
|
|
262
|
+
export function moveMakeFuncArgPtrs(ctxt, args) {
|
|
263
|
+
// Avoid write barriers! Because our write barrier enqueues what
|
|
264
|
+
// was there before, we might enqueue garbage.
|
|
265
|
+
// We *must* zero this space ourselves because it's defined in
|
|
266
|
+
// assembly code and the GC will scan these pointers. Otherwise,
|
|
267
|
+
// there will be garbage here.
|
|
268
|
+
for (let i = 0; i < $.len(args.Ints); i++) {
|
|
269
|
+
const arg = args.Ints[i];
|
|
270
|
+
{
|
|
271
|
+
// Avoid write barriers! Because our write barrier enqueues what
|
|
272
|
+
// was there before, we might enqueue garbage.
|
|
273
|
+
// We *must* zero this space ourselves because it's defined in
|
|
274
|
+
// assembly code and the GC will scan these pointers. Otherwise,
|
|
275
|
+
// there will be garbage here.
|
|
276
|
+
if (ctxt.regPtrs.Get(i)) {
|
|
277
|
+
(uintptr)(unsafe.Pointer(args.Ptrs[i])).value = arg;
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
// We *must* zero this space ourselves because it's defined in
|
|
281
|
+
// assembly code and the GC will scan these pointers. Otherwise,
|
|
282
|
+
// there will be garbage here.
|
|
283
|
+
(uintptr)(unsafe.Pointer(args.Ptrs[i])).value = 0;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=makefunc.gs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makefunc.gs.js","sourceRoot":"","sources":["../../../gs/reflect/makefunc.gs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Type, Value } from './type.js';
|
|
2
|
+
export declare function MapOf(key: Type, elem: Type): Type;
|
|
3
|
+
export declare class MapIter {
|
|
4
|
+
private map;
|
|
5
|
+
private iterator;
|
|
6
|
+
private currentEntry;
|
|
7
|
+
constructor(map: Map<any, any>);
|
|
8
|
+
Next(): boolean;
|
|
9
|
+
Key(): any;
|
|
10
|
+
Value(): any;
|
|
11
|
+
Reset(m: any): void;
|
|
12
|
+
}
|
|
13
|
+
export declare function MakeMap(typ: Type): Value;
|
|
14
|
+
export declare function MakeMapWithSize(typ: Type, _n: number): Value;
|