gofront 1.8.0 → 1.9.0

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 (177) hide show
  1. package/README.md +3 -3
  2. package/package.json +5 -4
  3. package/src/backend/js/expressions.js +849 -371
  4. package/src/backend/js/index.js +241 -147
  5. package/src/backend/js/natives.js +383 -0
  6. package/src/backend/js/runtime.js +512 -2547
  7. package/src/backend/js/statements.js +506 -103
  8. package/src/backend/js/stdlib/index.js +45 -93
  9. package/src/backend/js/templ.js +32 -45
  10. package/src/backend/js/type-info.js +177 -13
  11. package/src/backend/shared/fixed-float.js +20 -0
  12. package/src/backend/shared/fmt-types.js +63 -171
  13. package/src/backend/shared/host-unicode.js +36 -0
  14. package/src/backend/wasm/boundary.js +490 -965
  15. package/src/backend/wasm/emit-builtins.js +643 -256
  16. package/src/backend/wasm/emit-exprs.js +124 -57
  17. package/src/backend/wasm/emit-maps.js +17 -367
  18. package/src/backend/wasm/emit-stmts.js +325 -75
  19. package/src/backend/wasm/emit.js +104 -13
  20. package/src/backend/wasm/globals.js +47 -8
  21. package/src/backend/wasm/glue.js +2 -4
  22. package/src/backend/wasm/index.js +36 -530
  23. package/src/backend/wasm/method-expr.js +12 -1
  24. package/src/backend/wasm/module-emitter.js +92 -717
  25. package/src/backend/wasm/monomorph.js +103 -6
  26. package/src/backend/wasm/natives.js +596 -0
  27. package/src/backend/wasm/prescan.js +5 -153
  28. package/src/backend/wasm/prune-funcs.js +89 -0
  29. package/src/backend/wasm/stdlib/index.js +2 -32
  30. package/src/backend/wasm/types.js +68 -20
  31. package/src/backend/wasm/variadic.js +3 -3
  32. package/src/cli/cli-core.js +5 -1
  33. package/src/cli/test-runner.js +115 -342
  34. package/src/compiler.js +108 -130
  35. package/src/lexer/lexer.js +105 -11
  36. package/src/lexer/templ-lexer.js +61 -18
  37. package/src/lexer/tokens.js +1 -0
  38. package/src/link/stdlib.js +354 -132
  39. package/src/link/type-names.js +148 -0
  40. package/src/link/wasm.js +30 -6
  41. package/src/lower/bounds.js +153 -0
  42. package/src/lower/captures.js +92 -33
  43. package/src/lower/embedding.js +32 -3
  44. package/src/lower/errors-as.js +196 -0
  45. package/src/lower/fmt-formatters.js +905 -0
  46. package/src/lower/functions.js +2 -0
  47. package/src/lower/gen-types.js +274 -0
  48. package/src/lower/index.js +7 -1
  49. package/src/lower/json-codecs.js +228 -247
  50. package/src/lower/ownership.js +25 -7
  51. package/src/lower/reachability.js +69 -51
  52. package/src/lower/walk.js +12 -0
  53. package/src/parser/declarations.js +28 -5
  54. package/src/parser/expressions.js +86 -16
  55. package/src/parser/statements.js +1 -0
  56. package/src/parser/templ.js +44 -5
  57. package/src/parser/types.js +1 -0
  58. package/src/resolver.js +1 -2
  59. package/src/typechecker/assignability.js +124 -11
  60. package/src/typechecker/const-fold.js +70 -27
  61. package/src/typechecker/constants.js +32 -6
  62. package/src/typechecker/expressions.js +326 -98
  63. package/src/typechecker/index.js +208 -33
  64. package/src/typechecker/init-order.js +136 -40
  65. package/src/typechecker/operand-text.js +40 -0
  66. package/src/typechecker/resolve.js +192 -36
  67. package/src/typechecker/statements.js +122 -11
  68. package/src/typechecker/stdlib/excluded.js +9 -5
  69. package/src/typechecker/stdlib/index.js +25 -9
  70. package/src/typechecker/termination.js +10 -1
  71. package/src/typechecker/types.js +203 -573
  72. package/stdlib/bytes/buffer.go +479 -0
  73. package/stdlib/bytes/bytes.go +1010 -0
  74. package/stdlib/bytes/reader.go +161 -0
  75. package/stdlib/context/context.go +115 -0
  76. package/stdlib/crypto/rand/rand.go +34 -0
  77. package/stdlib/crypto/sha256/sha256.go +249 -0
  78. package/stdlib/encoding/base64/base64.go +331 -0
  79. package/stdlib/encoding/binary/binary.go +332 -0
  80. package/stdlib/encoding/hex/hex.go +140 -0
  81. package/stdlib/encoding/json/json.go +62 -0
  82. package/stdlib/errors/errors.go +174 -0
  83. package/stdlib/fmt/errors.go +110 -0
  84. package/stdlib/fmt/format.go +732 -0
  85. package/stdlib/fmt/print.go +1232 -0
  86. package/stdlib/gom/gom.go +293 -0
  87. package/stdlib/html/html.go +251 -0
  88. package/stdlib/internal/fmtrt/fmtrt.go +163 -0
  89. package/stdlib/internal/jsonrt/dec.go +171 -38
  90. package/stdlib/internal/jsonrt/enc.go +186 -36
  91. package/stdlib/internal/jsonrt/scanner.go +17 -8
  92. package/stdlib/io/io.go +157 -1
  93. package/stdlib/maps/maps.go +131 -0
  94. package/stdlib/math/bits/bits.go +507 -0
  95. package/stdlib/math/extra.go +16 -14
  96. package/stdlib/math/math.go +439 -0
  97. package/stdlib/math/rand/rand.go +297 -0
  98. package/stdlib/os/os.go +93 -0
  99. package/stdlib/path/filepath/filepath.go +47 -0
  100. package/stdlib/path/path.go +394 -0
  101. package/stdlib/regexp/regexp.go +231 -0
  102. package/stdlib/slices/slices.go +526 -0
  103. package/stdlib/slices/sort.go +209 -0
  104. package/stdlib/slices/zsort_cmp.go +480 -0
  105. package/stdlib/slices/zsort_ordered.go +482 -0
  106. package/stdlib/sort/sort.go +391 -452
  107. package/stdlib/sort/zsort_func.go +480 -0
  108. package/stdlib/sort/zsort_iface.go +480 -0
  109. package/stdlib/strconv/float.go +1699 -0
  110. package/stdlib/strconv/isprint.go +752 -0
  111. package/stdlib/strconv/quote.go +235 -50
  112. package/stdlib/strconv/strconv.go +616 -0
  113. package/stdlib/strings/builder.go +95 -0
  114. package/stdlib/strings/reader.go +163 -0
  115. package/stdlib/strings/replacer.go +102 -0
  116. package/stdlib/strings/strings.go +807 -0
  117. package/stdlib/sync/sync.go +268 -0
  118. package/stdlib/testing/async_js.go +61 -0
  119. package/stdlib/testing/benchmark.go +297 -0
  120. package/stdlib/testing/testing.go +523 -0
  121. package/stdlib/time/duration.go +233 -0
  122. package/stdlib/time/format.go +745 -0
  123. package/stdlib/time/parse.go +790 -0
  124. package/stdlib/time/sleep_js.go +63 -0
  125. package/stdlib/time/time.go +834 -0
  126. package/stdlib/unicode/unicode.go +141 -3
  127. package/stdlib/unicode/utf8/utf8.go +464 -0
  128. package/src/backend/js/fmt-runtime.js +0 -573
  129. package/src/backend/js/stdlib/base64.js +0 -12
  130. package/src/backend/js/stdlib/binary.js +0 -102
  131. package/src/backend/js/stdlib/bits.js +0 -119
  132. package/src/backend/js/stdlib/builder.js +0 -98
  133. package/src/backend/js/stdlib/bytes.js +0 -368
  134. package/src/backend/js/stdlib/errors.js +0 -45
  135. package/src/backend/js/stdlib/fmt.js +0 -517
  136. package/src/backend/js/stdlib/gom.js +0 -155
  137. package/src/backend/js/stdlib/hex.js +0 -17
  138. package/src/backend/js/stdlib/html.js +0 -20
  139. package/src/backend/js/stdlib/io.js +0 -137
  140. package/src/backend/js/stdlib/json.js +0 -1167
  141. package/src/backend/js/stdlib/maps.js +0 -37
  142. package/src/backend/js/stdlib/math.js +0 -85
  143. package/src/backend/js/stdlib/os.js +0 -13
  144. package/src/backend/js/stdlib/path.js +0 -48
  145. package/src/backend/js/stdlib/rand.js +0 -32
  146. package/src/backend/js/stdlib/regexp.js +0 -54
  147. package/src/backend/js/stdlib/sha256.js +0 -12
  148. package/src/backend/js/stdlib/shared.js +0 -17
  149. package/src/backend/js/stdlib/simd.js +0 -34
  150. package/src/backend/js/stdlib/slices.js +0 -107
  151. package/src/backend/js/stdlib/sort.js +0 -30
  152. package/src/backend/js/stdlib/strconv.js +0 -79
  153. package/src/backend/js/stdlib/strings.js +0 -301
  154. package/src/backend/js/stdlib/sync.js +0 -13
  155. package/src/backend/js/stdlib/testing.js +0 -41
  156. package/src/backend/js/stdlib/time.js +0 -152
  157. package/src/backend/js/stdlib/unicode.js +0 -25
  158. package/src/backend/js/stdlib/utf8.js +0 -26
  159. package/src/backend/wasm/stdlib/bytes.js +0 -6716
  160. package/src/backend/wasm/stdlib/core.js +0 -10278
  161. package/src/backend/wasm/stdlib/io.js +0 -3578
  162. package/src/backend/wasm/stdlib/packages.js +0 -2402
  163. package/src/backend/wasm/stdlib/pure.js +0 -720
  164. package/src/backend/wasm/stdlib/time.js +0 -2229
  165. package/src/typechecker/stdlib/core.js +0 -1079
  166. package/src/typechecker/stdlib/extended.js +0 -1210
  167. package/stdlib/bytes/iter.go +0 -192
  168. package/stdlib/bytes/search.go +0 -240
  169. package/stdlib/bytes/split.go +0 -218
  170. package/stdlib/errors/overlay.go +0 -12
  171. package/stdlib/maps/iter.go +0 -65
  172. package/stdlib/slices/extra.go +0 -73
  173. package/stdlib/slices/iter.go +0 -113
  174. package/stdlib/strings/extra.go +0 -35
  175. package/stdlib/strings/iter.go +0 -122
  176. package/stdlib/sync/extra.go +0 -105
  177. package/stdlib/unicode/utf8/bytes.go +0 -239
@@ -0,0 +1,439 @@
1
+ // Package math: constants, IEEE-754 bit access and the elementary functions.
2
+ //
3
+ // The bit-level functions are plain Go over Float64bits; the transcendental
4
+ // ones call the host's Math.* through intrinsics. Functions marked
5
+ // //gofront:native keep their Go body as the specification and compile to a
6
+ // single host expression or instruction when natives are enabled.
7
+ package math
8
+
9
+ // Mathematical constants.
10
+ const (
11
+ E = 2.71828182845904523536028747135266249775724709369995957496696763
12
+ Pi = 3.14159265358979323846264338327950288419716939937510582097494459
13
+ Phi = 1.61803398874989484820458683436563811772030917980576286213544862
14
+ Sqrt2 = 1.41421356237309504880168872420969807856967187537694807317667974
15
+ SqrtE = 1.64872127070012814684865078781416357165377610071014801157507931
16
+ SqrtPi = 1.77245385090551602729816748334114518279754945612238712821380779
17
+ SqrtPhi = 1.27201964951406896425242246173749149171560804184009624861664038
18
+ Ln2 = 0.693147180559945309417232121458176568075500134360255254120680009
19
+ Log2E = 1.44269504088896340735992468100189213742664595415298593413544940
20
+ Ln10 = 2.30258509299404568401799145468436420760110148862877297603332790
21
+ Log10E = 0.43429448190325182765112891891660508229439700580366656611445378
22
+ )
23
+
24
+ // Floating-point limits.
25
+ const (
26
+ MaxFloat32 = 3.40282346638528859811704183484516925440e+38
27
+ SmallestNonzeroFloat32 = 1.401298464324817070923729583289916131280e-45
28
+ MaxFloat64 = 1.79769313486231570814527423731704356798070e+308
29
+ SmallestNonzeroFloat64 = 4.9406564584124654417656879286822137236505980e-324
30
+ )
31
+
32
+ // Integer limits. MaxInt, MinInt and MaxUint are typed: `int` is 64 bits.
33
+ const (
34
+ MaxInt int = 1<<63 - 1
35
+ MinInt int = -1 << 63
36
+ MaxInt8 = 1<<7 - 1
37
+ MinInt8 = -1 << 7
38
+ MaxInt16 = 1<<15 - 1
39
+ MinInt16 = -1 << 15
40
+ MaxInt32 = 1<<31 - 1
41
+ MinInt32 = -1 << 31
42
+ MaxInt64 = 1<<63 - 1
43
+ MinInt64 = -1 << 63
44
+ MaxUint uint = 1<<64 - 1
45
+ MaxUint8 = 1<<8 - 1
46
+ MaxUint16 = 1<<16 - 1
47
+ MaxUint32 = 1<<32 - 1
48
+ MaxUint64 = 1<<64 - 1
49
+ )
50
+
51
+ const (
52
+ uvnan uint64 = 0x7FF8000000000001
53
+ uvneginf uint64 = 0xFFF0000000000000
54
+ uvone uint64 = 0x3FF0000000000000
55
+ halfShift uint64 = 1 << (shift - 1)
56
+ )
57
+
58
+ // ── IEEE-754 bit access ───────────────────────────────────────
59
+
60
+ // Float64bits returns the IEEE 754 binary representation of f.
61
+ //
62
+ //gofront:intrinsic math_float64bits
63
+ func Float64bits(f float64) uint64
64
+
65
+ // Float64frombits returns the float64 with binary representation b.
66
+ //
67
+ //gofront:intrinsic math_float64frombits
68
+ func Float64frombits(b uint64) float64
69
+
70
+ // Float32bits returns the IEEE 754 binary representation of f.
71
+ //
72
+ //gofront:intrinsic math_float32bits
73
+ func Float32bits(f float32) uint32
74
+
75
+ // Float32frombits returns the float32 with binary representation b.
76
+ //
77
+ //gofront:intrinsic math_float32frombits
78
+ func Float32frombits(b uint32) float32
79
+
80
+ // ── classification and sign ───────────────────────────────────
81
+
82
+ // IsNaN reports whether f is an IEEE 754 "not-a-number" value.
83
+ //
84
+ //gofront:native math.IsNaN
85
+ func IsNaN(f float64) (is bool) {
86
+ return f != f
87
+ }
88
+
89
+ // IsInf reports whether f is an infinity, according to sign.
90
+ //
91
+ //gofront:native math.IsInf
92
+ func IsInf(f float64, sign int) bool {
93
+ return sign >= 0 && f > MaxFloat64 || sign <= 0 && f < -MaxFloat64
94
+ }
95
+
96
+ // Inf returns positive infinity if sign >= 0, negative infinity if sign < 0.
97
+ //
98
+ //gofront:native math.Inf
99
+ func Inf(sign int) float64 {
100
+ var v uint64
101
+ if sign >= 0 {
102
+ v = 0x7FF0000000000000
103
+ } else {
104
+ v = uvneginf
105
+ }
106
+ return Float64frombits(v)
107
+ }
108
+
109
+ // NaN returns an IEEE 754 "not-a-number" value.
110
+ //
111
+ //gofront:native math.NaN
112
+ func NaN() float64 { return Float64frombits(uvnan) }
113
+
114
+ // Signbit reports whether x is negative or negative zero.
115
+ //
116
+ //gofront:native math.Signbit
117
+ func Signbit(x float64) bool {
118
+ return Float64bits(x)&(1<<63) != 0
119
+ }
120
+
121
+ // Copysign returns a value with the magnitude of f and the sign of sign.
122
+ //
123
+ //gofront:native math.Copysign
124
+ func Copysign(f, sign float64) float64 {
125
+ const signBit = 1 << 63
126
+ return Float64frombits(Float64bits(f)&^signBit | Float64bits(sign)&signBit)
127
+ }
128
+
129
+ // Abs returns the absolute value of x.
130
+ //
131
+ //gofront:native math.Abs
132
+ func Abs(x float64) float64 {
133
+ return Float64frombits(Float64bits(x) &^ (1 << 63))
134
+ }
135
+
136
+ // Max returns the larger of x or y.
137
+ //
138
+ //gofront:native math.Max
139
+ func Max(x, y float64) float64 {
140
+ switch {
141
+ case IsInf(x, 1) || IsInf(y, 1):
142
+ return Inf(1)
143
+ case IsNaN(x) || IsNaN(y):
144
+ return NaN()
145
+ case x == 0 && x == y:
146
+ if Signbit(x) {
147
+ return y
148
+ }
149
+ return x
150
+ }
151
+ if x > y {
152
+ return x
153
+ }
154
+ return y
155
+ }
156
+
157
+ // Min returns the smaller of x or y.
158
+ //
159
+ //gofront:native math.Min
160
+ func Min(x, y float64) float64 {
161
+ switch {
162
+ case IsInf(x, -1) || IsInf(y, -1):
163
+ return Inf(-1)
164
+ case IsNaN(x) || IsNaN(y):
165
+ return NaN()
166
+ case x == 0 && x == y:
167
+ if Signbit(x) {
168
+ return x
169
+ }
170
+ return y
171
+ }
172
+ if x < y {
173
+ return x
174
+ }
175
+ return y
176
+ }
177
+
178
+ // Dim returns the maximum of x-y or 0.
179
+ func Dim(x, y float64) float64 {
180
+ v := x - y
181
+ if v <= 0 {
182
+ return 0
183
+ }
184
+ return v
185
+ }
186
+
187
+ // ── rounding ──────────────────────────────────────────────────
188
+
189
+ // Modf returns integer and fractional floating-point numbers that sum to f.
190
+ func Modf(f float64) (int float64, frac float64) {
191
+ if f < 1 {
192
+ switch {
193
+ case f < 0:
194
+ int, frac = Modf(-f)
195
+ return -int, -frac
196
+ case f == 0:
197
+ return f, f
198
+ }
199
+ return 0, f
200
+ }
201
+ x := Float64bits(f)
202
+ e := uint(x>>shift)&mask - bias
203
+ if e < 64-12 {
204
+ x &^= 1<<(64-12-e) - 1
205
+ }
206
+ int = Float64frombits(x)
207
+ frac = f - int
208
+ return
209
+ }
210
+
211
+ // Trunc returns the integer value of x.
212
+ //
213
+ //gofront:native math.Trunc
214
+ func Trunc(x float64) float64 {
215
+ if x == 0 || IsNaN(x) || IsInf(x, 0) {
216
+ return x
217
+ }
218
+ d, _ := Modf(x)
219
+ return d
220
+ }
221
+
222
+ // Floor returns the greatest integer value less than or equal to x.
223
+ //
224
+ //gofront:native math.Floor
225
+ func Floor(x float64) float64 {
226
+ if x == 0 || IsNaN(x) || IsInf(x, 0) {
227
+ return x
228
+ }
229
+ if x < 0 {
230
+ d, fract := Modf(-x)
231
+ if fract != 0.0 {
232
+ d = d + 1
233
+ }
234
+ return -d
235
+ }
236
+ d, _ := Modf(x)
237
+ return d
238
+ }
239
+
240
+ // Ceil returns the least integer value greater than or equal to x.
241
+ //
242
+ //gofront:native math.Ceil
243
+ func Ceil(x float64) float64 {
244
+ return -Floor(-x)
245
+ }
246
+
247
+ // Round returns the nearest integer, rounding half away from zero.
248
+ //
249
+ //gofront:native math.Round
250
+ func Round(x float64) float64 {
251
+ bits := Float64bits(x)
252
+ e := uint(bits>>shift) & mask
253
+ if e < bias {
254
+ bits &= signMask
255
+ if e == bias-1 {
256
+ bits |= uvone
257
+ }
258
+ } else if e < bias+shift {
259
+ e -= bias
260
+ bits += halfShift >> e
261
+ bits &^= fracMask >> e
262
+ }
263
+ return Float64frombits(bits)
264
+ }
265
+
266
+ // Remainder returns the IEEE 754 floating-point remainder of x/y.
267
+ func Remainder(x, y float64) float64 {
268
+ const (
269
+ Tiny = 4.45014771701440276618e-308
270
+ HalfMax = MaxFloat64 / 2
271
+ )
272
+ switch {
273
+ case IsNaN(x) || IsNaN(y) || IsInf(x, 0) || y == 0:
274
+ return NaN()
275
+ case IsInf(y, 0):
276
+ return x
277
+ }
278
+ sign := false
279
+ if x < 0 {
280
+ x = -x
281
+ sign = true
282
+ }
283
+ if y < 0 {
284
+ y = -y
285
+ }
286
+ if x == y {
287
+ if sign {
288
+ return Copysign(0, -1)
289
+ }
290
+ return 0
291
+ }
292
+ if y <= HalfMax {
293
+ x = Mod(x, y+y)
294
+ }
295
+ if y < Tiny {
296
+ if x+x > y {
297
+ x -= y
298
+ if x+x >= y {
299
+ x -= y
300
+ }
301
+ }
302
+ } else {
303
+ yHalf := 0.5 * y
304
+ if x > yHalf {
305
+ x -= y
306
+ if x >= yHalf {
307
+ x -= y
308
+ }
309
+ }
310
+ }
311
+ if sign {
312
+ x = -x
313
+ }
314
+ return x
315
+ }
316
+
317
+ // ── square root ───────────────────────────────────────────────
318
+
319
+ // Sqrt returns the square root of x.
320
+ //
321
+ //gofront:native math.Sqrt
322
+ func Sqrt(x float64) float64 {
323
+ switch {
324
+ case x == 0 || IsNaN(x) || IsInf(x, 1):
325
+ return x
326
+ case x < 0:
327
+ return NaN()
328
+ }
329
+ ix := Float64bits(x)
330
+ exp := int((ix >> shift) & mask)
331
+ if exp == 0 {
332
+ for ix&(1<<shift) == 0 {
333
+ ix <<= 1
334
+ exp--
335
+ }
336
+ exp++
337
+ }
338
+ exp -= bias
339
+ ix &^= mask << shift
340
+ ix |= 1 << shift
341
+ if exp&1 == 1 {
342
+ ix <<= 1
343
+ }
344
+ exp >>= 1
345
+ ix <<= 1
346
+ var q, s uint64
347
+ r := uint64(1 << (shift + 1))
348
+ for r != 0 {
349
+ t := s + r
350
+ if t <= ix {
351
+ s = t + r
352
+ ix -= t
353
+ q += r
354
+ }
355
+ ix <<= 1
356
+ r >>= 1
357
+ }
358
+ if ix != 0 {
359
+ q += q & 1
360
+ }
361
+ ix = q>>1 + uint64(exp-1+bias)<<shift
362
+ return Float64frombits(ix)
363
+ }
364
+
365
+ // Exp2 returns 2**x.
366
+ func Exp2(x float64) float64 { return Pow(2, x) }
367
+
368
+ // ── host functions ────────────────────────────────────────────
369
+ //
370
+ // Each is the host's Math.* of the same name; Mod is JavaScript's `%`.
371
+
372
+ //gofront:intrinsic math_sin
373
+ func Sin(x float64) float64
374
+
375
+ //gofront:intrinsic math_cos
376
+ func Cos(x float64) float64
377
+
378
+ //gofront:intrinsic math_tan
379
+ func Tan(x float64) float64
380
+
381
+ //gofront:intrinsic math_asin
382
+ func Asin(x float64) float64
383
+
384
+ //gofront:intrinsic math_acos
385
+ func Acos(x float64) float64
386
+
387
+ //gofront:intrinsic math_atan
388
+ func Atan(x float64) float64
389
+
390
+ //gofront:intrinsic math_atan2
391
+ func Atan2(y, x float64) float64
392
+
393
+ //gofront:intrinsic math_sinh
394
+ func Sinh(x float64) float64
395
+
396
+ //gofront:intrinsic math_cosh
397
+ func Cosh(x float64) float64
398
+
399
+ //gofront:intrinsic math_tanh
400
+ func Tanh(x float64) float64
401
+
402
+ //gofront:intrinsic math_exp
403
+ func Exp(x float64) float64
404
+
405
+ //gofront:intrinsic math_expm1
406
+ func Expm1(x float64) float64
407
+
408
+ //gofront:intrinsic math_log
409
+ func Log(x float64) float64
410
+
411
+ //gofront:intrinsic math_log1p
412
+ func Log1p(x float64) float64
413
+
414
+ //gofront:intrinsic math_log2
415
+ func Log2(x float64) float64
416
+
417
+ //gofront:intrinsic math_log10
418
+ func Log10(x float64) float64
419
+
420
+ //gofront:intrinsic math_cbrt
421
+ func Cbrt(x float64) float64
422
+
423
+ //gofront:intrinsic math_pow
424
+ func hostPow(x, y float64) float64
425
+
426
+ // Pow returns x**y. JavaScript's Math.pow gives NaN for 1 and -1 to an
427
+ // infinite or NaN power where Go gives 1.
428
+ func Pow(x, y float64) float64 {
429
+ if x == 1 || x == -1 && IsInf(y, 0) {
430
+ return 1
431
+ }
432
+ return hostPow(x, y)
433
+ }
434
+
435
+ //gofront:intrinsic math_hypot
436
+ func Hypot(p, q float64) float64
437
+
438
+ //gofront:intrinsic math_mod
439
+ func Mod(x, y float64) float64