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.
Files changed (198) hide show
  1. package/compiler/analysis.go +129 -8
  2. package/compiler/compiler.go +4 -1
  3. package/compiler/composite-lit.go +2 -4
  4. package/compiler/expr-call.go +12 -0
  5. package/compiler/lit.go +100 -6
  6. package/compiler/protobuf.go +2 -2
  7. package/compiler/spec-value.go +3 -3
  8. package/compiler/spec.go +6 -3
  9. package/compiler/stmt-assign.go +1 -1
  10. package/dist/gs/builtin/builtin.d.ts +45 -0
  11. package/dist/gs/builtin/builtin.js +197 -0
  12. package/dist/gs/builtin/builtin.js.map +1 -1
  13. package/dist/gs/builtin/slice.js +2 -1
  14. package/dist/gs/builtin/slice.js.map +1 -1
  15. package/dist/gs/bytes/buffer.gs.d.ts +56 -0
  16. package/dist/gs/bytes/buffer.gs.js +611 -0
  17. package/dist/gs/bytes/buffer.gs.js.map +1 -0
  18. package/dist/gs/bytes/bytes.gs.d.ts +78 -0
  19. package/dist/gs/bytes/bytes.gs.js +1011 -0
  20. package/dist/gs/bytes/bytes.gs.js.map +1 -0
  21. package/dist/gs/bytes/index.d.ts +4 -0
  22. package/dist/gs/bytes/index.js +5 -0
  23. package/dist/gs/bytes/index.js.map +1 -0
  24. package/dist/gs/bytes/iter.gs.d.ts +9 -0
  25. package/dist/gs/bytes/iter.gs.js +143 -0
  26. package/dist/gs/bytes/iter.gs.js.map +1 -0
  27. package/dist/gs/bytes/reader.gs.d.ts +34 -0
  28. package/dist/gs/bytes/reader.gs.js +198 -0
  29. package/dist/gs/bytes/reader.gs.js.map +1 -0
  30. package/dist/gs/github.com/pkg/errors/errors.d.ts +1 -1
  31. package/dist/gs/github.com/pkg/errors/errors.js +182 -23
  32. package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
  33. package/dist/gs/github.com/pkg/errors/go113.d.ts +1 -1
  34. package/dist/gs/github.com/pkg/errors/go113.js +1 -1
  35. package/dist/gs/github.com/pkg/errors/go113.js.map +1 -1
  36. package/dist/gs/github.com/pkg/errors/index.d.ts +3 -3
  37. package/dist/gs/github.com/pkg/errors/index.js +3 -3
  38. package/dist/gs/github.com/pkg/errors/index.js.map +1 -1
  39. package/dist/gs/github.com/pkg/errors/stack.d.ts +1 -1
  40. package/dist/gs/github.com/pkg/errors/stack.js +8 -5
  41. package/dist/gs/github.com/pkg/errors/stack.js.map +1 -1
  42. package/dist/gs/internal/abi/index.d.ts +20 -0
  43. package/dist/gs/internal/abi/index.js +20 -0
  44. package/dist/gs/internal/abi/index.js.map +1 -0
  45. package/dist/gs/internal/bytealg/index.d.ts +14 -0
  46. package/dist/gs/internal/bytealg/index.js +139 -0
  47. package/dist/gs/internal/bytealg/index.js.map +1 -0
  48. package/dist/gs/internal/byteorder/index.d.ts +1 -1
  49. package/dist/gs/internal/byteorder/index.js +4 -4
  50. package/dist/gs/internal/byteorder/index.js.map +1 -1
  51. package/dist/gs/math/index.d.ts +44 -44
  52. package/dist/gs/math/index.js +44 -44
  53. package/dist/gs/math/index.js.map +1 -1
  54. package/dist/gs/os/index.d.ts +19 -19
  55. package/dist/gs/os/index.js +19 -19
  56. package/dist/gs/os/index.js.map +1 -1
  57. package/dist/gs/reflect/deepequal.d.ts +2 -0
  58. package/dist/gs/reflect/deepequal.js +91 -0
  59. package/dist/gs/reflect/deepequal.js.map +1 -0
  60. package/dist/gs/reflect/index.d.ts +8 -0
  61. package/dist/gs/reflect/index.js +10 -0
  62. package/dist/gs/reflect/index.js.map +1 -0
  63. package/dist/gs/reflect/iter.d.ts +4 -0
  64. package/dist/gs/reflect/iter.js +24 -0
  65. package/dist/gs/reflect/iter.js.map +1 -0
  66. package/dist/gs/reflect/map.d.ts +20 -0
  67. package/dist/gs/reflect/map.js +74 -0
  68. package/dist/gs/reflect/map.js.map +1 -0
  69. package/dist/gs/reflect/swapper.d.ts +2 -0
  70. package/dist/gs/reflect/swapper.js +46 -0
  71. package/dist/gs/reflect/swapper.js.map +1 -0
  72. package/dist/gs/reflect/type.d.ts +134 -0
  73. package/dist/gs/reflect/type.js +825 -0
  74. package/dist/gs/reflect/type.js.map +1 -0
  75. package/dist/gs/reflect/types.d.ts +90 -0
  76. package/dist/gs/reflect/types.js +119 -0
  77. package/dist/gs/reflect/types.js.map +1 -0
  78. package/dist/gs/reflect/value.d.ts +13 -0
  79. package/dist/gs/reflect/value.js +202 -0
  80. package/dist/gs/reflect/value.js.map +1 -0
  81. package/dist/gs/reflect/visiblefields.d.ts +4 -0
  82. package/dist/gs/reflect/visiblefields.js +149 -0
  83. package/dist/gs/reflect/visiblefields.js.map +1 -0
  84. package/dist/gs/strconv/index.d.ts +6 -6
  85. package/dist/gs/strconv/index.js +6 -6
  86. package/dist/gs/strconv/index.js.map +1 -1
  87. package/dist/gs/strings/index.d.ts +1 -1
  88. package/dist/gs/strings/index.js +1 -1
  89. package/dist/gs/strings/index.js.map +1 -1
  90. package/dist/gs/strings/replace.js.map +1 -1
  91. package/dist/gs/sync/atomic/index.d.ts +4 -4
  92. package/dist/gs/sync/atomic/index.js +4 -4
  93. package/dist/gs/sync/atomic/index.js.map +1 -1
  94. package/dist/gs/syscall/index.d.ts +6 -6
  95. package/dist/gs/syscall/index.js +34 -28
  96. package/dist/gs/syscall/index.js.map +1 -1
  97. package/dist/gs/unicode/utf8/utf8.d.ts +1 -1
  98. package/dist/gs/unicode/utf8/utf8.js +4 -2
  99. package/dist/gs/unicode/utf8/utf8.js.map +1 -1
  100. package/dist/gs/unsafe/unsafe.js.map +1 -1
  101. package/gs/builtin/builtin.ts +219 -0
  102. package/gs/builtin/slice.ts +2 -1
  103. package/gs/bytes/buffer.gs.ts +614 -0
  104. package/gs/bytes/bytes.gs.ts +1180 -0
  105. package/gs/bytes/godoc.txt +69 -0
  106. package/gs/bytes/index.ts +69 -0
  107. package/gs/bytes/iter.gs.ts +149 -0
  108. package/gs/bytes/reader.gs.ts +230 -0
  109. package/gs/github.com/pkg/errors/errors.ts +408 -238
  110. package/gs/github.com/pkg/errors/go113.ts +5 -6
  111. package/gs/github.com/pkg/errors/index.ts +12 -3
  112. package/gs/github.com/pkg/errors/stack.ts +107 -105
  113. package/gs/internal/abi/index.ts +37 -0
  114. package/gs/internal/bytealg/index.ts +149 -0
  115. package/gs/internal/byteorder/index.ts +5 -5
  116. package/gs/math/abs.gs.test.ts +1 -1
  117. package/gs/math/acosh.gs.test.ts +4 -2
  118. package/gs/math/asin.gs.test.ts +1 -1
  119. package/gs/math/asinh.gs.test.ts +7 -3
  120. package/gs/math/atan.gs.test.ts +1 -1
  121. package/gs/math/atan2.gs.test.ts +17 -9
  122. package/gs/math/atanh.gs.test.ts +1 -1
  123. package/gs/math/bits.gs.test.ts +1 -1
  124. package/gs/math/cbrt.gs.test.ts +1 -1
  125. package/gs/math/const.gs.test.ts +34 -8
  126. package/gs/math/copysign.gs.test.ts +7 -3
  127. package/gs/math/dim.gs.test.ts +19 -7
  128. package/gs/math/erf.gs.test.ts +1 -1
  129. package/gs/math/erfinv.gs.test.ts +4 -2
  130. package/gs/math/exp.gs.test.ts +1 -1
  131. package/gs/math/expm1.gs.test.ts +6 -4
  132. package/gs/math/floor.gs.test.ts +17 -4
  133. package/gs/math/fma.gs.test.ts +53 -53
  134. package/gs/math/frexp.gs.test.ts +112 -117
  135. package/gs/math/gamma.gs.test.ts +1 -1
  136. package/gs/math/hypot.gs.test.ts +53 -53
  137. package/gs/math/index.ts +80 -44
  138. package/gs/math/j0.gs.test.ts +6 -2
  139. package/gs/math/j1.gs.test.ts +6 -2
  140. package/gs/math/jn.gs.test.ts +9 -5
  141. package/gs/math/ldexp.gs.test.ts +103 -86
  142. package/gs/math/lgamma.gs.test.ts +10 -10
  143. package/gs/math/log.gs.test.ts +1 -1
  144. package/gs/math/log10.gs.test.ts +1 -1
  145. package/gs/math/log1p.gs.test.ts +2 -2
  146. package/gs/math/logb.gs.test.ts +1 -1
  147. package/gs/math/mod.gs.test.ts +2 -2
  148. package/gs/math/modf.gs.test.ts +7 -7
  149. package/gs/math/nextafter.gs.test.ts +9 -7
  150. package/gs/math/pow.gs.test.ts +6 -4
  151. package/gs/math/pow10.gs.test.ts +1 -1
  152. package/gs/math/remainder.gs.test.ts +1 -1
  153. package/gs/math/signbit.gs.test.ts +1 -1
  154. package/gs/math/sin.gs.test.ts +1 -1
  155. package/gs/math/sincos.gs.test.ts +33 -14
  156. package/gs/math/sinh.gs.test.ts +1 -1
  157. package/gs/math/sqrt.gs.test.ts +1 -1
  158. package/gs/math/tan.gs.test.ts +3 -3
  159. package/gs/math/tanh.gs.test.ts +1 -1
  160. package/gs/os/index.ts +128 -19
  161. package/gs/reflect/ANALYSIS.md +278 -0
  162. package/gs/reflect/deepequal.test.ts +41 -0
  163. package/gs/reflect/deepequal.ts +169 -0
  164. package/gs/reflect/function-types.test.ts +146 -0
  165. package/gs/reflect/godoc.txt +67 -0
  166. package/gs/reflect/index.ts +83 -0
  167. package/gs/reflect/iter.ts +44 -0
  168. package/gs/reflect/map.test.ts +30 -0
  169. package/gs/reflect/map.ts +85 -0
  170. package/gs/reflect/swapper.ts +52 -0
  171. package/gs/reflect/type.ts +1016 -0
  172. package/gs/reflect/types.ts +214 -0
  173. package/gs/reflect/value.ts +270 -0
  174. package/gs/reflect/visiblefields.ts +177 -0
  175. package/gs/strconv/index.ts +39 -6
  176. package/gs/strings/index.ts +7 -1
  177. package/gs/strings/replace.ts +1 -9
  178. package/gs/sync/atomic/index.ts +53 -4
  179. package/gs/syscall/index.ts +45 -37
  180. package/gs/unicode/utf8/utf8.ts +8 -5
  181. package/gs/unsafe/unsafe.ts +1 -1
  182. package/package.json +2 -1
  183. package/dist/gs/internal/testlog/index.d.ts +0 -1
  184. package/dist/gs/internal/testlog/index.js +0 -5
  185. package/dist/gs/internal/testlog/index.js.map +0 -1
  186. package/dist/gs/maps/iter.gs.d.ts +0 -7
  187. package/dist/gs/maps/iter.gs.js +0 -65
  188. package/dist/gs/maps/iter.gs.js.map +0 -1
  189. package/dist/gs/maps/maps.gs.d.ts +0 -7
  190. package/dist/gs/maps/maps.gs.js +0 -79
  191. package/dist/gs/maps/maps.gs.js.map +0 -1
  192. package/dist/gs/stringslite/index.d.ts +0 -1
  193. package/dist/gs/stringslite/index.js +0 -2
  194. package/dist/gs/stringslite/index.js.map +0 -1
  195. package/dist/gs/stringslite/strings.d.ts +0 -11
  196. package/dist/gs/stringslite/strings.js +0 -67
  197. package/dist/gs/stringslite/strings.js.map +0 -1
  198. package/gs/internal/testlog/index.ts +0 -7
@@ -0,0 +1,83 @@
1
+ // Export the main reflect functions organized like Go stdlib
2
+ export {
3
+ TypeOf,
4
+ ValueOf,
5
+ Value,
6
+ Kind,
7
+ ArrayOf,
8
+ SliceOf,
9
+ PointerTo,
10
+ PtrTo,
11
+ MapOf,
12
+ ChanOf,
13
+ } from './type'
14
+ export type { Type } from './type'
15
+ export { DeepEqual } from './deepequal'
16
+ export {
17
+ Zero,
18
+ Copy,
19
+ Indirect,
20
+ New,
21
+ MakeSlice,
22
+ MakeMap,
23
+ Append,
24
+ MakeChan,
25
+ Select,
26
+ } from './value'
27
+ export { Swapper } from './swapper'
28
+
29
+ // Export new types and constants
30
+ export {
31
+ ChanDir,
32
+ RecvDir,
33
+ SendDir,
34
+ BothDir,
35
+ StructTag,
36
+ ValueError,
37
+ SelectDir,
38
+ SelectSend,
39
+ SelectRecv,
40
+ SelectDefault,
41
+ bitVector,
42
+ } from './types'
43
+ export type {
44
+ uintptr,
45
+ Pointer,
46
+ StructField,
47
+ Method,
48
+ SelectCase,
49
+ SliceHeader,
50
+ StringHeader,
51
+ MapIter,
52
+ } from './types'
53
+
54
+ // Export kind constants
55
+ export {
56
+ Invalid,
57
+ Bool,
58
+ Int,
59
+ Int8,
60
+ Int16,
61
+ Int32,
62
+ Int64,
63
+ Uint,
64
+ Uint8,
65
+ Uint16,
66
+ Uint32,
67
+ Uint64,
68
+ Uintptr,
69
+ Float32,
70
+ Float64,
71
+ Complex64,
72
+ Complex128,
73
+ Array,
74
+ Chan,
75
+ Func,
76
+ Interface,
77
+ Map,
78
+ Ptr,
79
+ Slice,
80
+ String,
81
+ Struct,
82
+ UnsafePointer,
83
+ } from './type'
@@ -0,0 +1,44 @@
1
+ import { Type, Value } from './type.js'
2
+ import { uintptr } from './types.js'
3
+ import { ValueOf } from './value.js'
4
+
5
+ import * as iter from '@goscript/iter/index.js'
6
+
7
+ export function rangeNum<
8
+ T extends
9
+ | number
10
+ | number
11
+ | number
12
+ | number
13
+ | number
14
+ | number
15
+ | number
16
+ | number
17
+ | number
18
+ | number
19
+ | uintptr,
20
+ N extends number | number,
21
+ >(num: N, t: Type): iter.Seq<Value> {
22
+ // cannot use range T(v) because no core type.
23
+
24
+ // if the iteration value type is define by
25
+ // type T built-in type.
26
+ return (_yield: ((v: Value) => boolean) | null): void => {
27
+ let convert = t!.PkgPath!() != ''
28
+ // cannot use range T(v) because no core type.
29
+
30
+ // if the iteration value type is define by
31
+ // type T built-in type.
32
+ for (let i = 0 as unknown as T; i < (num as unknown as T); i++) {
33
+ let tmp = ValueOf(i).clone()
34
+ // if the iteration value type is define by
35
+ // type T built-in type.
36
+ if (convert) {
37
+ tmp = tmp.Convert(t).clone()
38
+ }
39
+ if (!_yield!(tmp)) {
40
+ return
41
+ }
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,30 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { MapIter } from './map.js'
3
+
4
+ describe('MapIter', () => {
5
+ it('should iterate over map entries with proper typing', () => {
6
+ const map = new Map<string, number>()
7
+ map.set('one', 1)
8
+ map.set('two', 2)
9
+ map.set('three', 3)
10
+
11
+ const iter = new MapIter<string, number>(map)
12
+
13
+ expect(iter.current?.done === false).toBe(true)
14
+ expect(iter.Key()).toBe('one')
15
+ expect(iter.Value()).toBe(1)
16
+
17
+ expect(iter.Next()).toBe(true)
18
+ expect(iter.current?.done === false).toBe(true)
19
+ expect(typeof iter.Key()).toBe('string')
20
+ expect(typeof iter.Value()).toBe('number')
21
+
22
+ const newMap = new Map<string, number>()
23
+ newMap.set('reset', 100)
24
+ iter.Reset(newMap)
25
+
26
+ expect(iter.current?.done === false).toBe(true)
27
+ expect(iter.Key()).toBe('reset')
28
+ expect(iter.Value()).toBe(100)
29
+ })
30
+ })
@@ -0,0 +1,85 @@
1
+ import { Type, Kind, Value } from './type.js'
2
+
3
+ // Simple MapOf implementation using JavaScript Map
4
+ export function MapOf(key: Type, elem: Type): Type {
5
+ return new MapType(key, elem)
6
+ }
7
+
8
+ // Simple map type implementation
9
+ class MapType implements Type {
10
+ constructor(
11
+ private _keyType: Type,
12
+ private _elemType: Type,
13
+ ) {}
14
+
15
+ public String(): string {
16
+ return `map[${this._keyType.String()}]${this._elemType.String()}`
17
+ }
18
+
19
+ public Kind(): Kind {
20
+ return new Kind(21) // Map kind
21
+ }
22
+
23
+ public Size(): number {
24
+ return 8 // pointer size
25
+ }
26
+
27
+ public Elem(): Type | null {
28
+ return this._elemType
29
+ }
30
+
31
+ public Key(): Type | null {
32
+ return this._keyType
33
+ }
34
+
35
+ public NumField(): number {
36
+ return 0
37
+ }
38
+ }
39
+
40
+ /**
41
+ * MapIter provides an iterator interface for Go maps.
42
+ * It wraps a JavaScript Map iterator and provides methods to iterate over key-value pairs.
43
+ * @template K - The type of keys in the map
44
+ * @template V - The type of values in the map
45
+ */
46
+ export class MapIter<K = unknown, V = unknown> {
47
+ public iterator: Iterator<[K, V]>
48
+ public current: IteratorResult<[K, V]> | null = null
49
+
50
+ constructor(public map: Map<K, V>) {
51
+ this.iterator = map.entries()
52
+ this.Next()
53
+ }
54
+
55
+ public Next(): boolean {
56
+ this.current = this.iterator.next()
57
+ return !this.current.done
58
+ }
59
+
60
+ public Key(): K | null {
61
+ return this.current?.value?.[0] ?? null
62
+ }
63
+
64
+ public Value(): V | null {
65
+ return this.current?.value?.[1] ?? null
66
+ }
67
+
68
+ public Reset(m: Map<K, V>): void {
69
+ this.map = m
70
+ this.iterator = m.entries()
71
+ this.current = null
72
+ this.Next()
73
+ }
74
+ }
75
+
76
+ // Helper functions for map operations
77
+ export function MakeMap(typ: Type): Value {
78
+ const map = new Map()
79
+ return new Value(map, typ)
80
+ }
81
+
82
+ export function MakeMapWithSize(typ: Type, _n: number): Value {
83
+ // JavaScript Map doesn't have initial size, so we ignore n
84
+ return MakeMap(typ)
85
+ }
@@ -0,0 +1,52 @@
1
+ import { ReflectValue } from './types'
2
+
3
+ // Swapper returns a function that swaps the elements in the provided slice.
4
+ // Swapper panics if the provided interface is not a slice.
5
+ export function Swapper(slice: ReflectValue): (i: number, j: number) => void {
6
+ let actualArray: unknown[] | null = null
7
+
8
+ // Try to extract the underlying array
9
+ if (Array.isArray(slice)) {
10
+ actualArray = slice
11
+ } else if (slice && typeof slice === 'object' && '__meta__' in slice) {
12
+ // GoScript slice object
13
+ const meta = (slice as { __meta__?: { backing?: unknown[] } }).__meta__
14
+ if (meta && meta.backing && Array.isArray(meta.backing)) {
15
+ actualArray = meta.backing
16
+ }
17
+ }
18
+
19
+ if (!actualArray) {
20
+ // Return a no-op function if we can't extract an array
21
+ return () => {}
22
+ }
23
+
24
+ // Fast path for slices of size 0 and 1. Nothing to swap.
25
+ switch (actualArray.length) {
26
+ case 0:
27
+ return (_i: number, _j: number): void => {
28
+ throw new Error('reflect: slice index out of range')
29
+ }
30
+ case 1:
31
+ return (i: number, j: number): void => {
32
+ if (i !== 0 || j !== 0) {
33
+ throw new Error('reflect: slice index out of range')
34
+ }
35
+ }
36
+ }
37
+
38
+ // Return the swapper function
39
+ return (i: number, j: number) => {
40
+ if (
41
+ actualArray &&
42
+ i >= 0 &&
43
+ j >= 0 &&
44
+ i < actualArray.length &&
45
+ j < actualArray.length
46
+ ) {
47
+ const temp = actualArray[i]
48
+ actualArray[i] = actualArray[j]
49
+ actualArray[j] = temp
50
+ }
51
+ }
52
+ }