@neocompose/cli 0.87.2 → 0.88.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 (40) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +14 -0
  3. package/dist/neo-runtime.mjs +3288 -724
  4. package/dist/test-worker.mjs +2445 -114
  5. package/package.json +1 -1
  6. package/skills/neocompose-cli/SKILL.md +95 -279
  7. package/skills/neocompose-cli/references/cli-development.md +101 -117
  8. package/skills/neocompose-cli/references/declarations/annotations-and-storage.md +112 -0
  9. package/skills/neocompose-cli/references/declarations/constructors.md +164 -0
  10. package/skills/neocompose-cli/references/declarations/declarations.md +103 -0
  11. package/skills/neocompose-cli/references/declarations/initializers.md +100 -0
  12. package/skills/neocompose-cli/references/declarations/member-kinds.md +107 -0
  13. package/skills/neocompose-cli/references/declarations/overloads.md +50 -0
  14. package/skills/neocompose-cli/references/dialogues.md +145 -0
  15. package/skills/neocompose-cli/references/neoscript/collections.md +98 -0
  16. package/skills/neocompose-cli/references/neoscript/control-flow.md +123 -0
  17. package/skills/neocompose-cli/references/neoscript/delegates-and-listeners.md +107 -0
  18. package/skills/neocompose-cli/references/neoscript/math-and-random.md +114 -0
  19. package/skills/neocompose-cli/references/neoscript/neoscript.md +112 -0
  20. package/skills/neocompose-cli/references/neoscript/strings.md +47 -0
  21. package/skills/neocompose-cli/references/neoscript/testing-and-migrations.md +73 -0
  22. package/skills/neocompose-cli/references/neoscript/types-and-narrowing.md +111 -0
  23. package/skills/neocompose-cli/references/sync/branches-and-history.md +69 -0
  24. package/skills/neocompose-cli/references/sync/conflicts-and-recovery.md +68 -0
  25. package/skills/neocompose-cli/references/sync/sync.md +96 -0
  26. package/skills/neocompose-cli/references/sync/unity-export.md +47 -0
  27. package/skills/neocompose-cli/references/values/defaults-and-localization.md +86 -0
  28. package/skills/neocompose-cli/references/values/files.md +71 -0
  29. package/skills/neocompose-cli/references/values/identities.md +97 -0
  30. package/skills/neocompose-cli/references/values/references.md +151 -0
  31. package/skills/neocompose-cli/references/values/values.md +110 -0
  32. package/skills/neocompose-cli/references/world/animation.md +133 -0
  33. package/skills/neocompose-cli/references/world/grids-and-cell-patterns.md +55 -0
  34. package/skills/neocompose-cli/references/world/variants.md +112 -0
  35. package/skills/neocompose-cli/references/world/world.md +105 -0
  36. package/skills/neocompose-cli/references/animation-and-world-authoring.md +0 -582
  37. package/skills/neocompose-cli/references/commands-and-sync.md +0 -408
  38. package/skills/neocompose-cli/references/declarations-and-construction.md +0 -773
  39. package/skills/neocompose-cli/references/neoscript.md +0 -990
  40. package/skills/neocompose-cli/references/values-identities-and-references.md +0 -421
@@ -879,6 +879,55 @@ var require_ignore = __commonJS({
879
879
  // src/test-worker.ts
880
880
  import { parentPort } from "node:worker_threads";
881
881
 
882
+ // src/workspace-lock.ts
883
+ import { join } from "node:path";
884
+
885
+ // src/ui.ts
886
+ var colorEnabled = process.stdout.isTTY === true && process.env.NO_COLOR === void 0 && process.env.TERM !== "dumb";
887
+ function paint(open, close) {
888
+ if (!colorEnabled) return (text) => text;
889
+ return (text) => `\x1B[${open}m${text}\x1B[${close}m`;
890
+ }
891
+ var color = {
892
+ bold: paint(1, 22),
893
+ dim: paint(2, 22),
894
+ red: paint(31, 39),
895
+ green: paint(32, 39),
896
+ yellow: paint(33, 39),
897
+ blue: paint(34, 39),
898
+ magenta: paint(35, 39),
899
+ cyan: paint(36, 39)
900
+ };
901
+ var sym = {
902
+ ok: color.green("\u2714"),
903
+ fail: color.red("\u2716"),
904
+ warn: color.yellow("\u25B2"),
905
+ info: color.cyan("\u25CF"),
906
+ arrow: color.dim("\u2192"),
907
+ branch: color.magenta("\u2387"),
908
+ tag: color.cyan("\u2301"),
909
+ pointer: color.cyan("\u276F")
910
+ };
911
+ var CHANGE_KIND_COLOR = {
912
+ create: color.green,
913
+ update: color.yellow,
914
+ delete: color.red
915
+ };
916
+
917
+ // src/workspace-lock.ts
918
+ var LOCK_FILE = join(".neo", "workspace.lock");
919
+
920
+ // src/export-state.ts
921
+ import { join as join2 } from "node:path";
922
+
923
+ // ../packages/manifest/src/value-comparison.ts
924
+ function isObjectRecord(value) {
925
+ return typeof value === "object" && value !== null && !Array.isArray(value);
926
+ }
927
+
928
+ // src/export-state.ts
929
+ var EXPORT_STATE_FILE = join2(".neo", "export.json");
930
+
882
931
  // ../node_modules/uuid/dist-node/regex.js
883
932
  var regex_default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;
884
933
 
@@ -2627,6 +2676,86 @@ var NEOSCRIPT_BUILTIN_TYPE_SYMBOLS = [
2627
2676
  ["x"],
2628
2677
  "Returns the square root. Accepts int or float and returns float; does not accept decimal."
2629
2678
  ),
2679
+ mathFunction(
2680
+ "Pow",
2681
+ ["x", "y"],
2682
+ "Returns x raised to y. Accepts int or float, rounds inputs to float32, and returns float."
2683
+ ),
2684
+ mathFunction(
2685
+ "Exp",
2686
+ ["x"],
2687
+ "Returns e raised to x. Accepts int or float, rounds inputs to float32, and returns float."
2688
+ ),
2689
+ mathFunction(
2690
+ "Log",
2691
+ ["x"],
2692
+ "Returns the natural logarithm. Accepts int or float, rounds inputs to float32, and returns float."
2693
+ ),
2694
+ mathFunction(
2695
+ "Log10",
2696
+ ["x"],
2697
+ "Returns the base-10 logarithm. Accepts int or float, rounds inputs to float32, and returns float."
2698
+ ),
2699
+ mathFunction(
2700
+ "Sin",
2701
+ ["x"],
2702
+ "Returns the sine of an angle in radians. Accepts int or float, rounds inputs to float32, and returns float."
2703
+ ),
2704
+ mathFunction(
2705
+ "Cos",
2706
+ ["x"],
2707
+ "Returns the cosine of an angle in radians. Accepts int or float, rounds inputs to float32, and returns float."
2708
+ ),
2709
+ mathFunction(
2710
+ "Tan",
2711
+ ["x"],
2712
+ "Returns the tangent of an angle in radians. Accepts int or float, rounds inputs to float32, and returns float."
2713
+ ),
2714
+ mathFunction(
2715
+ "Asin",
2716
+ ["x"],
2717
+ "Returns the inverse sine in radians. Accepts int or float, rounds inputs to float32, and returns float."
2718
+ ),
2719
+ mathFunction(
2720
+ "Acos",
2721
+ ["x"],
2722
+ "Returns the inverse cosine in radians. Accepts int or float, rounds inputs to float32, and returns float."
2723
+ ),
2724
+ mathFunction(
2725
+ "Atan",
2726
+ ["x"],
2727
+ "Returns the inverse tangent in radians. Accepts int or float, rounds inputs to float32, and returns float."
2728
+ ),
2729
+ mathFunction(
2730
+ "Atan2",
2731
+ ["y", "x"],
2732
+ "Returns the signed angle of x,y in radians. Accepts int or float, rounds inputs to float32, and returns float."
2733
+ ),
2734
+ mathFunction(
2735
+ "Lerp",
2736
+ ["a", "b", "t"],
2737
+ "Interpolates from a to b with t clamped to [0,1]. Accepts int or float, rounds inputs to float32, and returns float."
2738
+ ),
2739
+ mathFunction(
2740
+ "InverseLerp",
2741
+ ["a", "b", "value"],
2742
+ "Returns the clamped normalized position of value between a and b; equal endpoints return zero. Accepts int or float, rounds inputs to float32, and returns float."
2743
+ ),
2744
+ mathFunction(
2745
+ "MoveTowards",
2746
+ ["current", "target", "maxDelta"],
2747
+ "Moves toward target by maxDelta. A negative maxDelta moves away. Accepts int or float, rounds inputs to float32, and returns float."
2748
+ ),
2749
+ mathFunction(
2750
+ "Repeat",
2751
+ ["t", "length"],
2752
+ "Wraps t using a finite positive length. Negative t wraps with floor. Accepts int or float, rounds inputs to float32, and returns float."
2753
+ ),
2754
+ mathFunction(
2755
+ "PingPong",
2756
+ ["t", "length"],
2757
+ "Reflects t between zero and a finite positive length. Accepts int or float, rounds inputs to float32, and returns float."
2758
+ ),
2630
2759
  {
2631
2760
  ...property(
2632
2761
  "Math",
@@ -3815,29 +3944,58 @@ function isNSFunctionDecimalOp(value) {
3815
3944
  const digits = info.digitsPointer;
3816
3945
  return digits === void 0 || isNSPointer(digits);
3817
3946
  }
3818
- var NS_MATH_OPS = [
3819
- "min",
3820
- "max",
3821
- "clamp",
3822
- "round",
3823
- "floor",
3824
- "ceiling",
3825
- "truncate",
3826
- "abs",
3827
- "sign",
3828
- "sqrt"
3829
- ];
3947
+ var NS_MATH_OP_ARITIES = {
3948
+ min: 2,
3949
+ max: 2,
3950
+ clamp: 3,
3951
+ round: 1,
3952
+ floor: 1,
3953
+ ceiling: 1,
3954
+ truncate: 1,
3955
+ abs: 1,
3956
+ sign: 1,
3957
+ sqrt: 1,
3958
+ pow: 2,
3959
+ exp: 1,
3960
+ log: 1,
3961
+ log10: 1,
3962
+ sin: 1,
3963
+ cos: 1,
3964
+ tan: 1,
3965
+ asin: 1,
3966
+ acos: 1,
3967
+ atan: 1,
3968
+ atan2: 2,
3969
+ lerp: 3,
3970
+ inverselerp: 3,
3971
+ movetowards: 3,
3972
+ repeat: 2,
3973
+ pingpong: 2
3974
+ };
3830
3975
  function isNSFunctionMathOp(value) {
3831
3976
  const v = value;
3832
3977
  if (v?.type !== "mathOp" /* mathOp */) return false;
3833
3978
  const info = v.info;
3834
3979
  if (typeof info !== "object" || info === null) return false;
3835
- if (!NS_MATH_OPS.includes(info.op)) return false;
3980
+ if (!Object.hasOwn(NS_MATH_OP_ARITIES, info.op)) return false;
3836
3981
  const args = info.argPointers;
3837
3982
  if (!Array.isArray(args)) return false;
3983
+ if (args.length !== NS_MATH_OP_ARITIES[info.op]) return false;
3838
3984
  if (!args.every(isNSPointer)) return false;
3839
3985
  const decimal = info.decimal;
3840
- return decimal === void 0 || decimal === true;
3986
+ if (decimal === void 0) return true;
3987
+ if (decimal !== true) return false;
3988
+ return [
3989
+ "min",
3990
+ "max",
3991
+ "clamp",
3992
+ "round",
3993
+ "floor",
3994
+ "ceiling",
3995
+ "truncate",
3996
+ "abs",
3997
+ "sign"
3998
+ ].includes(info.op);
3841
3999
  }
3842
4000
  var NS_TEXT_STRING_OPS = [
3843
4001
  "length",
@@ -4177,7 +4335,8 @@ function isNSInstructionFor(value) {
4177
4335
  if (instruction?.type !== "for" /* for */) return false;
4178
4336
  if (!isNSVariable(instruction.initializer)) return false;
4179
4337
  if (!isNSBooleanExpression(instruction.condition)) return false;
4180
- if (!isNSInstructionAssign(instruction.iterator)) return false;
4338
+ if (!isNSInstructionAssign(instruction.iterator) && !isNSInstructionFunctionCall(instruction.iterator))
4339
+ return false;
4181
4340
  return isNSInstructions(instruction.instructions);
4182
4341
  }
4183
4342
  function isNSInstructionForEach(value) {
@@ -16495,11 +16654,6 @@ function referenceReadTypeInfo(reference) {
16495
16654
  };
16496
16655
  }
16497
16656
 
16498
- // ../packages/manifest/src/value-comparison.ts
16499
- function isObjectRecord(value) {
16500
- return typeof value === "object" && value !== null && !Array.isArray(value);
16501
- }
16502
-
16503
16657
  // ../packages/neoscript-runtime/src/values/canonical-json.ts
16504
16658
  function canonicalJsonStringify(value) {
16505
16659
  return JSON.stringify(toCanonicalJsonValue(value));
@@ -17937,6 +18091,7 @@ var NSGetterRuntimeError = class _NSGetterRuntimeError extends Error {
17937
18091
  node: { writable: true, value: void 0 },
17938
18092
  callerNode: { writable: true, value: void 0 },
17939
18093
  initializerValueId: { writable: true, value: void 0 },
18094
+ provisionalRandomFailure: { writable: true, value: void 0 },
17940
18095
  sourceOwnerId: { writable: true, value: void 0 },
17941
18096
  attachedValueId: { writable: true, value: void 0 }
17942
18097
  });
@@ -17961,6 +18116,1894 @@ var UncompiledInitializerRuntimeError = class extends NSGetterRuntimeError {
17961
18116
  valueId;
17962
18117
  };
17963
18118
 
18119
+ // ../packages/neoscript-language/src/random-contract.ts
18120
+ var NEO_RANDOM_IDS = {
18121
+ class: "system_75b4633d-65d0-5da1-ac09-e7c2de0cd102",
18122
+ constructor: "system_62be2a68-1c61-5be7-ac2e-13fa8e77eb26",
18123
+ Value: "system_135e16a9-1996-5e5b-9c2a-730b2896a2cd",
18124
+ RangeInt: "system_60709cd5-8924-5a8c-93e5-482c1e678cdb",
18125
+ RangeFloat: "system_5b15f87c-3ea4-57d8-9156-f12366b73b3b",
18126
+ Seed: "system_e4f25ff7-8b23-5c07-8bcc-6e112fd75575",
18127
+ GetSeed: "system_9d442bde-25e8-51af-baab-08e99947edcd",
18128
+ SetSeed: "system_1eea1de7-5a9b-55e6-8d59-5d27f829d4db",
18129
+ ValidateSeed: "system_a99e8b1e-c2c8-5a49-8497-a4ac9260702c"
18130
+ };
18131
+ var NEO_RANDOM_NATIVE_MEMBER_IDS = /* @__PURE__ */ new Set([
18132
+ NEO_RANDOM_IDS.Value,
18133
+ NEO_RANDOM_IDS.RangeInt,
18134
+ NEO_RANDOM_IDS.RangeFloat,
18135
+ NEO_RANDOM_IDS.GetSeed,
18136
+ NEO_RANDOM_IDS.SetSeed,
18137
+ NEO_RANDOM_IDS.ValidateSeed
18138
+ ]);
18139
+ function isNeoRandomSharedMethod(classId, memberId) {
18140
+ return classId === NEO_RANDOM_IDS.class && (memberId === NEO_RANDOM_IDS.Value || memberId === NEO_RANDOM_IDS.RangeInt || memberId === NEO_RANDOM_IDS.RangeFloat);
18141
+ }
18142
+
18143
+ // ../packages/neoscript-runtime/src/neoscript/NeoRandom.ts
18144
+ function argumentError(message) {
18145
+ throw new NSGetterRuntimeError(message, {
18146
+ errorClassId: NEO_ERROR_CLASS_IDS.NeoArgumentError
18147
+ });
18148
+ }
18149
+ function entropySeed() {
18150
+ if (typeof globalThis.crypto?.getRandomValues === "function") {
18151
+ return globalThis.crypto.getRandomValues(new Uint32Array(1))[0];
18152
+ }
18153
+ return Math.floor(Math.random() * 4294967296);
18154
+ }
18155
+ function validateRandomSeed(seed) {
18156
+ if (!Number.isSafeInteger(seed))
18157
+ argumentError("NeoRandom seed must be a safe integer.");
18158
+ }
18159
+ var NeoRandom = class _NeoRandom {
18160
+ constructor(seed = entropySeed(), onSeedWrite) {
18161
+ this.onSeedWrite = onSeedWrite;
18162
+ if (typeof seed === "string") {
18163
+ this.identity = seed;
18164
+ this.contentScope = true;
18165
+ } else this.resetSeed(seed);
18166
+ }
18167
+ onSeedWrite;
18168
+ x = 0;
18169
+ y = 0;
18170
+ z = 0;
18171
+ w = 0;
18172
+ identity;
18173
+ assignedSeed = 0;
18174
+ instances;
18175
+ contentScope = false;
18176
+ /** Monotonic draws, including isolated content evaluations; used by diagnostics. */
18177
+ draws = 0;
18178
+ get drawCount() {
18179
+ return this.draws;
18180
+ }
18181
+ get seed() {
18182
+ this.initializeIdentity();
18183
+ return this.assignedSeed;
18184
+ }
18185
+ set seed(seed) {
18186
+ this.resetSeed(seed);
18187
+ this.noteSeedWrite(NEO_RANDOM_IDS.Seed);
18188
+ }
18189
+ resetSeed(seed) {
18190
+ validateRandomSeed(seed);
18191
+ this.assignedSeed = seed;
18192
+ this.identity = void 0;
18193
+ this.x = seed >>> 0;
18194
+ this.y = Math.imul(1812433253, this.x ^ this.x >>> 30) + 1 >>> 0;
18195
+ this.z = Math.imul(1812433253, this.y ^ this.y >>> 30) + 2 >>> 0;
18196
+ this.w = Math.imul(1812433253, this.z ^ this.z >>> 30) + 3 >>> 0;
18197
+ }
18198
+ /** Install a lazy content seed, preserving even an uninitialized caller frame. */
18199
+ withIdentity(identity2, evaluate) {
18200
+ const pending = this.identity;
18201
+ const seed = this.assignedSeed;
18202
+ const instances = this.instances;
18203
+ const contentScope = this.contentScope;
18204
+ this.instances = void 0;
18205
+ this.contentScope = true;
18206
+ const x = this.x, y = this.y, z = this.z, w = this.w;
18207
+ this.identity = identity2;
18208
+ try {
18209
+ return evaluate();
18210
+ } finally {
18211
+ this.identity = pending;
18212
+ this.assignedSeed = seed;
18213
+ this.instances = instances;
18214
+ this.contentScope = contentScope;
18215
+ this.x = x;
18216
+ this.y = y;
18217
+ this.z = z;
18218
+ this.w = w;
18219
+ }
18220
+ }
18221
+ /** Reuse idle content-replay storage without hashing until the first draw. */
18222
+ deferIdentity(identity2) {
18223
+ this.identity = identity2;
18224
+ this.instances = void 0;
18225
+ this.contentScope = true;
18226
+ }
18227
+ /** Instance lookup retains discarded transient objects only weakly. */
18228
+ findInstance(value, storedId) {
18229
+ const streams = this.instances;
18230
+ if (streams === void 0) return void 0;
18231
+ if (storedId !== void 0) {
18232
+ const stored = streams.stored.get(storedId);
18233
+ if (stored !== void 0) return stored;
18234
+ }
18235
+ const transient = streams.transient.get(value);
18236
+ if (transient !== void 0 && storedId !== void 0) {
18237
+ streams.stored.set(storedId, transient);
18238
+ streams.transient.delete(value);
18239
+ }
18240
+ return transient;
18241
+ }
18242
+ addInstance(value, storedId, seed) {
18243
+ const stream = new _NeoRandom(seed);
18244
+ const streams = this.instances ??= {
18245
+ transient: /* @__PURE__ */ new WeakMap(),
18246
+ stored: /* @__PURE__ */ new Map()
18247
+ };
18248
+ if (storedId === void 0) streams.transient.set(value, stream);
18249
+ else streams.stored.set(storedId, stream);
18250
+ return stream;
18251
+ }
18252
+ clearInstances() {
18253
+ this.instances = void 0;
18254
+ }
18255
+ forgetInstance(id) {
18256
+ if (this.instances?.stored.delete(id))
18257
+ this.noteSeedWrite(`${NEO_RANDOM_IDS.Seed}:${id}`);
18258
+ }
18259
+ get isContentScope() {
18260
+ return this.contentScope;
18261
+ }
18262
+ noteSeedWrite(key) {
18263
+ if (!this.contentScope) this.onSeedWrite?.(key);
18264
+ }
18265
+ initializeIdentity() {
18266
+ if (this.identity !== void 0) {
18267
+ let seed = 2166136261;
18268
+ for (let i = 0; i < this.identity.length; i++) {
18269
+ seed = Math.imul(seed ^ this.identity.charCodeAt(i), 16777619);
18270
+ }
18271
+ this.seed = seed >>> 0;
18272
+ }
18273
+ }
18274
+ nextWord() {
18275
+ this.initializeIdentity();
18276
+ const t = this.x ^ this.x << 11;
18277
+ this.x = this.y;
18278
+ this.y = this.z;
18279
+ this.z = this.w;
18280
+ this.w = (this.w ^ this.w >>> 19 ^ t ^ t >>> 8) >>> 0;
18281
+ this.draws++;
18282
+ return this.w;
18283
+ }
18284
+ value() {
18285
+ return Math.fround((this.nextWord() >>> 8) / 16777215);
18286
+ }
18287
+ rangeInt(min, max) {
18288
+ if (!Number.isInteger(min))
18289
+ argumentError("NeoRandom.Range int min must be an integer.");
18290
+ if (min < -2147483648 || min > 2147483647)
18291
+ argumentError("NeoRandom.Range int min must fit int32.");
18292
+ if (!Number.isInteger(max))
18293
+ argumentError("NeoRandom.Range int max must be an integer.");
18294
+ if (max < -2147483648 || max > 2147483647)
18295
+ argumentError("NeoRandom.Range int max must fit int32.");
18296
+ if (min === max) return min;
18297
+ const width = Math.abs(max - min);
18298
+ const cutoff = Math.floor(4294967296 / width) * width;
18299
+ let word;
18300
+ do {
18301
+ word = this.nextWord();
18302
+ } while (word >= cutoff);
18303
+ const offset = word % width;
18304
+ return min < max ? min + offset : min - offset;
18305
+ }
18306
+ rangeFloat(min, max) {
18307
+ min = Math.fround(min);
18308
+ max = Math.fround(max);
18309
+ if (!Number.isFinite(min))
18310
+ argumentError("NeoRandom.Range float min must be finite.");
18311
+ if (!Number.isFinite(max))
18312
+ argumentError("NeoRandom.Range float max must be finite.");
18313
+ if (min === max) return min;
18314
+ if (min > max) {
18315
+ const previous = min;
18316
+ min = max;
18317
+ max = previous;
18318
+ }
18319
+ const u = this.value();
18320
+ if (u === 0) return min;
18321
+ if (u === 1) return max;
18322
+ const result = Math.fround((1 - u) * min + u * max);
18323
+ if (result < min) return min;
18324
+ if (result > max) return max;
18325
+ return result;
18326
+ }
18327
+ };
18328
+ var contentScratch = /* @__PURE__ */ new WeakMap();
18329
+ function withContentRandomSource(owner, identity2, evaluate) {
18330
+ let random;
18331
+ let idle;
18332
+ const source = () => {
18333
+ if (random !== void 0) return random;
18334
+ idle = contentScratch.get(owner);
18335
+ if (idle === void 0) contentScratch.set(owner, idle = []);
18336
+ random = idle.pop();
18337
+ if (random === void 0) random = new NeoRandom(identity2);
18338
+ else random.deferIdentity(identity2);
18339
+ return random;
18340
+ };
18341
+ try {
18342
+ return evaluate(source);
18343
+ } finally {
18344
+ if (random !== void 0) {
18345
+ random.clearInstances();
18346
+ idle.push(random);
18347
+ }
18348
+ }
18349
+ }
18350
+
18351
+ // ../packages/neoscript-runtime/src/neoscript/math/neo-math-kernel.ts
18352
+ var words = new DataView(new ArrayBuffer(8));
18353
+ function highWord(x) {
18354
+ words.setFloat64(0, x, false);
18355
+ return words.getInt32(0, false);
18356
+ }
18357
+ function lowWord(x) {
18358
+ words.setFloat64(0, x, false);
18359
+ return words.getInt32(4, false);
18360
+ }
18361
+ function withHighWord(x, w) {
18362
+ words.setFloat64(0, x, false);
18363
+ words.setInt32(0, w, false);
18364
+ return words.getFloat64(0, false);
18365
+ }
18366
+ function withLowWord(x, w) {
18367
+ words.setFloat64(0, x, false);
18368
+ words.setInt32(4, w, false);
18369
+ return words.getFloat64(0, false);
18370
+ }
18371
+ function copysign(x, y) {
18372
+ return withHighWord(
18373
+ x,
18374
+ highWord(x) & 2147483647 | highWord(y) & 2147483648
18375
+ );
18376
+ }
18377
+ var s_sin_y = new Array(2).fill(0);
18378
+ var s_cos_y = new Array(2).fill(0);
18379
+ var s_tan_y = new Array(2).fill(0);
18380
+ var e_rem_pio2_tx = new Array(3).fill(0);
18381
+ var k_rem_pio2_iq = new Array(20).fill(0);
18382
+ var k_rem_pio2_f = new Array(20).fill(0);
18383
+ var k_rem_pio2_fq = new Array(20).fill(0);
18384
+ var k_rem_pio2_q = new Array(20).fill(0);
18385
+ var e_pow_bp = [1, 1.5];
18386
+ var e_pow_dp_h = [0, 0.5849624872207642];
18387
+ var e_pow_dp_l = [0, 1350039202129749e-23];
18388
+ var e_pow_zero = 0;
18389
+ var e_pow_one = 1;
18390
+ var e_pow_two = 2;
18391
+ var e_pow_two53 = 9007199254740992;
18392
+ var e_pow_huge = 1e300;
18393
+ var e_pow_tiny = 1e-300;
18394
+ var e_pow_L1 = 0.5999999999999946;
18395
+ var e_pow_L2 = 0.4285714285785502;
18396
+ var e_pow_L3 = 0.33333332981837743;
18397
+ var e_pow_L4 = 0.272728123808534;
18398
+ var e_pow_L5 = 0.23066074577556175;
18399
+ var e_pow_L6 = 0.20697501780033842;
18400
+ var e_pow_P1 = 0.16666666666666602;
18401
+ var e_pow_P2 = -0.0027777777777015593;
18402
+ var e_pow_P3 = 6613756321437934e-20;
18403
+ var e_pow_P4 = -16533902205465252e-22;
18404
+ var e_pow_P5 = 41381367970572385e-24;
18405
+ var e_pow_lg2 = 0.6931471805599453;
18406
+ var e_pow_lg2_h = 0.6931471824645996;
18407
+ var e_pow_lg2_l = -1904654299957768e-24;
18408
+ var e_pow_ovt = 8008566259537294e-32;
18409
+ var e_pow_cp = 0.9617966939259756;
18410
+ var e_pow_cp_h = 0.9617967009544373;
18411
+ var e_pow_cp_l = -7028461650952758e-24;
18412
+ var e_pow_ivln2 = 1.4426950408889634;
18413
+ var e_pow_ivln2_h = 1.4426950216293335;
18414
+ var e_pow_ivln2_l = 19259629911266175e-24;
18415
+ function kernel___ieee754_pow(x, y) {
18416
+ let z = 0;
18417
+ let ax = 0;
18418
+ let z_h = 0;
18419
+ let z_l = 0;
18420
+ let p_h = 0;
18421
+ let p_l = 0;
18422
+ let y1 = 0;
18423
+ let t1 = 0;
18424
+ let t2 = 0;
18425
+ let r = 0;
18426
+ let s = 0;
18427
+ let t = 0;
18428
+ let u = 0;
18429
+ let v = 0;
18430
+ let w = 0;
18431
+ let i = 0;
18432
+ let j = 0;
18433
+ let k = 0;
18434
+ let yisint = 0;
18435
+ let n = 0;
18436
+ let hx = 0;
18437
+ let hy = 0;
18438
+ let ix = 0;
18439
+ let iy = 0;
18440
+ let lx = 0;
18441
+ let ly = 0;
18442
+ hx = highWord(x) | 0;
18443
+ lx = lowWord(x) >>> 0;
18444
+ hy = highWord(y) | 0;
18445
+ ly = lowWord(y) >>> 0;
18446
+ ix = hx & 2147483647 | 0;
18447
+ iy = hy & 2147483647 | 0;
18448
+ if ((iy >>> 0 | ly >>> 0) >>> 0 >>> 0 == 0 >>> 0) {
18449
+ return e_pow_one;
18450
+ }
18451
+ if (ix > 2146435072 || ix == 2146435072 && lx >>> 0 != 0 >>> 0 || iy > 2146435072 || iy == 2146435072 && ly >>> 0 != 0 >>> 0) {
18452
+ return x + y;
18453
+ }
18454
+ yisint = 0 | 0;
18455
+ if (hx < 0) {
18456
+ if (iy >= 1128267776) {
18457
+ yisint = 2 | 0;
18458
+ } else {
18459
+ if (iy >= 1072693248) {
18460
+ k = (iy >> 20) - 1023 | 0;
18461
+ if (k > 20) {
18462
+ j = ly >>> 52 - k | 0;
18463
+ if (j << 52 - k >>> 0 == ly >>> 0) {
18464
+ yisint = 2 - (j & 1) | 0;
18465
+ }
18466
+ } else {
18467
+ if (ly >>> 0 == 0 >>> 0) {
18468
+ j = iy >> 20 - k | 0;
18469
+ if (j << 20 - k == iy) {
18470
+ yisint = 2 - (j & 1) | 0;
18471
+ }
18472
+ }
18473
+ }
18474
+ }
18475
+ }
18476
+ }
18477
+ if (ly >>> 0 == 0 >>> 0) {
18478
+ if (iy == 2146435072) {
18479
+ if ((ix - 1072693248 >>> 0 | lx >>> 0) >>> 0 >>> 0 == 0 >>> 0) {
18480
+ return y - y;
18481
+ } else {
18482
+ if (ix >= 1072693248) {
18483
+ return hy >= 0 ? y : e_pow_zero;
18484
+ } else {
18485
+ return hy < 0 ? -y : e_pow_zero;
18486
+ }
18487
+ }
18488
+ }
18489
+ if (iy == 1072693248) {
18490
+ if (hy < 0) {
18491
+ return e_pow_one / x;
18492
+ } else {
18493
+ return x;
18494
+ }
18495
+ }
18496
+ if (hy == 1073741824) {
18497
+ return x * x;
18498
+ }
18499
+ if (hy == 1071644672) {
18500
+ if (hx >= 0) {
18501
+ return Math.sqrt(x);
18502
+ }
18503
+ }
18504
+ }
18505
+ ax = Math.abs(x);
18506
+ if (lx >>> 0 == 0 >>> 0) {
18507
+ if (ix == 2146435072 || ix == 0 || ix == 1072693248) {
18508
+ z = ax;
18509
+ if (hy < 0) {
18510
+ z = e_pow_one / z;
18511
+ }
18512
+ if (hx < 0) {
18513
+ if ((ix - 1072693248 | yisint) == 0) {
18514
+ z = (z - z) / (z - z);
18515
+ } else {
18516
+ if (yisint == 1) {
18517
+ z = -z;
18518
+ }
18519
+ }
18520
+ }
18521
+ return z;
18522
+ }
18523
+ }
18524
+ n = (hx >> 31) + 1 | 0;
18525
+ if ((n | yisint) == 0) {
18526
+ return (x - x) / (x - x);
18527
+ }
18528
+ s = e_pow_one;
18529
+ if ((n | yisint - 1) == 0) {
18530
+ s = -e_pow_one;
18531
+ }
18532
+ if (iy > 1105199104) {
18533
+ if (iy > 1139802112) {
18534
+ if (ix <= 1072693247) {
18535
+ return hy < 0 ? e_pow_huge * e_pow_huge : e_pow_tiny * e_pow_tiny;
18536
+ }
18537
+ if (ix >= 1072693248) {
18538
+ return hy > 0 ? e_pow_huge * e_pow_huge : e_pow_tiny * e_pow_tiny;
18539
+ }
18540
+ }
18541
+ if (ix < 1072693247) {
18542
+ return hy < 0 ? s * e_pow_huge * e_pow_huge : s * e_pow_tiny * e_pow_tiny;
18543
+ }
18544
+ if (ix > 1072693248) {
18545
+ return hy > 0 ? s * e_pow_huge * e_pow_huge : s * e_pow_tiny * e_pow_tiny;
18546
+ }
18547
+ t = ax - e_pow_one;
18548
+ w = t * t * (0.5 - t * (0.3333333333333333 - t * 0.25));
18549
+ u = e_pow_ivln2_h * t;
18550
+ v = t * e_pow_ivln2_l - w * e_pow_ivln2;
18551
+ t1 = u + v;
18552
+ t1 = withLowWord(t1, 0 | 0);
18553
+ t2 = v - (t1 - u);
18554
+ } else {
18555
+ let ss = 0;
18556
+ let s2 = 0;
18557
+ let s_h = 0;
18558
+ let s_l = 0;
18559
+ let t_h = 0;
18560
+ let t_l = 0;
18561
+ n = 0 | 0;
18562
+ if (ix < 1048576) {
18563
+ ax = ax * e_pow_two53;
18564
+ n = n - 53 | 0;
18565
+ ix = highWord(ax) | 0;
18566
+ }
18567
+ n = n + ((ix >> 20) - 1023) | 0;
18568
+ j = ix & 1048575 | 0;
18569
+ ix = j | 1072693248 | 0;
18570
+ if (j <= 235662) {
18571
+ k = 0 | 0;
18572
+ } else {
18573
+ if (j < 767610) {
18574
+ k = 1 | 0;
18575
+ } else {
18576
+ k = 0 | 0;
18577
+ n = n + 1 | 0;
18578
+ ix = ix - 1048576 | 0;
18579
+ }
18580
+ }
18581
+ ax = withHighWord(ax, ix | 0);
18582
+ u = ax - e_pow_bp[k];
18583
+ v = e_pow_one / (ax + e_pow_bp[k]);
18584
+ ss = u * v;
18585
+ s_h = ss;
18586
+ s_h = withLowWord(s_h, 0 | 0);
18587
+ t_h = e_pow_zero;
18588
+ t_h = withHighWord(
18589
+ t_h,
18590
+ (ix >> 1 | 536870912) + 524288 + (k << 18) | 0
18591
+ );
18592
+ t_l = ax - (t_h - e_pow_bp[k]);
18593
+ s_l = v * (u - s_h * t_h - s_h * t_l);
18594
+ s2 = ss * ss;
18595
+ r = s2 * s2 * (e_pow_L1 + s2 * (e_pow_L2 + s2 * (e_pow_L3 + s2 * (e_pow_L4 + s2 * (e_pow_L5 + s2 * e_pow_L6)))));
18596
+ r = r + s_l * (s_h + ss);
18597
+ s2 = s_h * s_h;
18598
+ t_h = 3 + s2 + r;
18599
+ t_h = withLowWord(t_h, 0 | 0);
18600
+ t_l = r - (t_h - 3 - s2);
18601
+ u = s_h * t_h;
18602
+ v = s_l * t_h + t_l * ss;
18603
+ p_h = u + v;
18604
+ p_h = withLowWord(p_h, 0 | 0);
18605
+ p_l = v - (p_h - u);
18606
+ z_h = e_pow_cp_h * p_h;
18607
+ z_l = e_pow_cp_l * p_h + p_l * e_pow_cp + e_pow_dp_l[k];
18608
+ t = n;
18609
+ t1 = z_h + z_l + e_pow_dp_h[k] + t;
18610
+ t1 = withLowWord(t1, 0 | 0);
18611
+ t2 = z_l - (t1 - t - e_pow_dp_h[k] - z_h);
18612
+ }
18613
+ y1 = y;
18614
+ y1 = withLowWord(y1, 0 | 0);
18615
+ p_l = (y - y1) * t1 + y * t2;
18616
+ p_h = y1 * t1;
18617
+ z = p_l + p_h;
18618
+ j = highWord(z) | 0;
18619
+ i = lowWord(z) | 0;
18620
+ if (j >= 1083179008) {
18621
+ if ((j - 1083179008 | i) != 0) {
18622
+ return s * e_pow_huge * e_pow_huge;
18623
+ } else {
18624
+ if (p_l + e_pow_ovt > z - p_h) {
18625
+ return s * e_pow_huge * e_pow_huge;
18626
+ }
18627
+ }
18628
+ } else {
18629
+ if ((j & 2147483647) >= 1083231232) {
18630
+ if (((j >>> 0) - (3230714880 >>> 0) >>> 0 | i >>> 0) >>> 0 >>> 0 != 0 >>> 0) {
18631
+ return s * e_pow_tiny * e_pow_tiny;
18632
+ } else {
18633
+ if (p_l <= z - p_h) {
18634
+ return s * e_pow_tiny * e_pow_tiny;
18635
+ }
18636
+ }
18637
+ }
18638
+ }
18639
+ i = j & 2147483647 | 0;
18640
+ k = (i >> 20) - 1023 | 0;
18641
+ n = 0 | 0;
18642
+ if (i > 1071644672) {
18643
+ n = j + (1048576 >> k + 1) | 0;
18644
+ k = ((n & 2147483647) >> 20) - 1023 | 0;
18645
+ t = e_pow_zero;
18646
+ t = withHighWord(t, n & ~(1048575 >> k) | 0);
18647
+ n = (n & 1048575 | 1048576) >> 20 - k | 0;
18648
+ if (j < 0) {
18649
+ n = -n | 0;
18650
+ }
18651
+ p_h = p_h - t;
18652
+ }
18653
+ t = p_l + p_h;
18654
+ t = withLowWord(t, 0 | 0);
18655
+ u = t * e_pow_lg2_h;
18656
+ v = (p_l - (t - p_h)) * e_pow_lg2 + t * e_pow_lg2_l;
18657
+ z = u + v;
18658
+ w = v - (z - u);
18659
+ t = z * z;
18660
+ t1 = z - t * (e_pow_P1 + t * (e_pow_P2 + t * (e_pow_P3 + t * (e_pow_P4 + t * e_pow_P5))));
18661
+ r = z * t1 / (t1 - e_pow_two) - (w + z * w);
18662
+ z = e_pow_one - (r - z);
18663
+ j = highWord(z) | 0;
18664
+ j = j + (n << 20) | 0;
18665
+ if (j >> 20 <= 0) {
18666
+ z = kernel_scalbn(z, n);
18667
+ } else {
18668
+ z = withHighWord(z, highWord(z) + (n << 20) | 0);
18669
+ }
18670
+ return s * z;
18671
+ }
18672
+ var e_exp_one = 1;
18673
+ var e_exp_halF = [0.5, -0.5];
18674
+ var e_exp_huge = 1e300;
18675
+ var e_exp_twom1000 = 9332636185032189e-317;
18676
+ var e_exp_o_threshold = 709.782712893384;
18677
+ var e_exp_u_threshold = -745.1332191019411;
18678
+ var e_exp_ln2HI = [0.6931471803691238, -0.6931471803691238];
18679
+ var e_exp_ln2LO = [19082149292705877e-26, -19082149292705877e-26];
18680
+ var e_exp_invln2 = 1.4426950408889634;
18681
+ var e_exp_P1 = 0.16666666666666602;
18682
+ var e_exp_P2 = -0.0027777777777015593;
18683
+ var e_exp_P3 = 6613756321437934e-20;
18684
+ var e_exp_P4 = -16533902205465252e-22;
18685
+ var e_exp_P5 = 41381367970572385e-24;
18686
+ function kernel___ieee754_exp(x) {
18687
+ let y = 0;
18688
+ let hi = 0;
18689
+ let lo = 0;
18690
+ let c = 0;
18691
+ let t = 0;
18692
+ let k = 0;
18693
+ let xsb = 0;
18694
+ let hx = 0;
18695
+ hx = highWord(x) >>> 0;
18696
+ xsb = (hx >>> 31 >>> 0 & 1 >>> 0) >>> 0 | 0;
18697
+ hx = (hx & 2147483647) >>> 0;
18698
+ if (hx >>> 0 >= 1082535490 >>> 0) {
18699
+ if (hx >>> 0 >= 2146435072 >>> 0) {
18700
+ if (((hx >>> 0 & 1048575 >>> 0) >>> 0 >>> 0 | lowWord(x) >>> 0) >>> 0 >>> 0 != 0 >>> 0) {
18701
+ return x + x;
18702
+ } else {
18703
+ return xsb == 0 ? x : 0;
18704
+ }
18705
+ }
18706
+ if (x > e_exp_o_threshold) {
18707
+ return e_exp_huge * e_exp_huge;
18708
+ }
18709
+ if (x < e_exp_u_threshold) {
18710
+ return e_exp_twom1000 * e_exp_twom1000;
18711
+ }
18712
+ }
18713
+ if (hx >>> 0 > 1071001154 >>> 0) {
18714
+ if (hx >>> 0 < 1072734898 >>> 0) {
18715
+ hi = x - e_exp_ln2HI[xsb];
18716
+ lo = e_exp_ln2LO[xsb];
18717
+ k = 1 - xsb - xsb | 0;
18718
+ } else {
18719
+ k = e_exp_invln2 * x + e_exp_halF[xsb] | 0 | 0;
18720
+ t = k;
18721
+ hi = x - t * e_exp_ln2HI[0];
18722
+ lo = t * e_exp_ln2LO[0];
18723
+ }
18724
+ x = hi - lo;
18725
+ } else {
18726
+ if (hx >>> 0 < 1043333120 >>> 0) {
18727
+ if (e_exp_huge + x > e_exp_one) {
18728
+ return e_exp_one + x;
18729
+ }
18730
+ } else {
18731
+ k = 0 | 0;
18732
+ }
18733
+ }
18734
+ t = x * x;
18735
+ c = x - t * (e_exp_P1 + t * (e_exp_P2 + t * (e_exp_P3 + t * (e_exp_P4 + t * e_exp_P5))));
18736
+ if (k == 0) {
18737
+ return e_exp_one - (x * c / (c - 2) - x);
18738
+ } else {
18739
+ y = e_exp_one - (lo - x * c / (2 - c) - hi);
18740
+ }
18741
+ if (k >= -1021) {
18742
+ y = withHighWord(y, highWord(y) + (k << 20) | 0);
18743
+ return y;
18744
+ } else {
18745
+ y = withHighWord(y, highWord(y) + (k + 1e3 << 20) | 0);
18746
+ return y * e_exp_twom1000;
18747
+ }
18748
+ }
18749
+ var e_log_ln2_hi = 0.6931471803691238;
18750
+ var e_log_ln2_lo = 19082149292705877e-26;
18751
+ var e_log_two54 = 18014398509481984;
18752
+ var e_log_Lg1 = 0.6666666666666735;
18753
+ var e_log_Lg2 = 0.3999999999940942;
18754
+ var e_log_Lg3 = 0.2857142874366239;
18755
+ var e_log_Lg4 = 0.22222198432149784;
18756
+ var e_log_Lg5 = 0.1818357216161805;
18757
+ var e_log_Lg6 = 0.15313837699209373;
18758
+ var e_log_Lg7 = 0.14798198605116586;
18759
+ var e_log_zero = 0;
18760
+ function kernel___ieee754_log(x) {
18761
+ let hfsq = 0;
18762
+ let f = 0;
18763
+ let s = 0;
18764
+ let z = 0;
18765
+ let R = 0;
18766
+ let w = 0;
18767
+ let t1 = 0;
18768
+ let t2 = 0;
18769
+ let dk = 0;
18770
+ let k = 0;
18771
+ let hx = 0;
18772
+ let i = 0;
18773
+ let j = 0;
18774
+ let lx = 0;
18775
+ hx = highWord(x) | 0;
18776
+ lx = lowWord(x) >>> 0;
18777
+ k = 0 | 0;
18778
+ if (hx < 1048576) {
18779
+ if (((hx & 2147483647) >>> 0 | lx >>> 0) >>> 0 >>> 0 == 0 >>> 0) {
18780
+ return -e_log_two54 / e_log_zero;
18781
+ }
18782
+ if (hx < 0) {
18783
+ return (x - x) / e_log_zero;
18784
+ }
18785
+ k = k - 54 | 0;
18786
+ x = x * e_log_two54;
18787
+ hx = highWord(x) | 0;
18788
+ }
18789
+ if (hx >= 2146435072) {
18790
+ return x + x;
18791
+ }
18792
+ k = k + ((hx >> 20) - 1023) | 0;
18793
+ hx = hx & 1048575 | 0;
18794
+ i = hx + 614244 & 1048576 | 0;
18795
+ x = withHighWord(x, hx | i ^ 1072693248 | 0);
18796
+ k = k + (i >> 20) | 0;
18797
+ f = x - 1;
18798
+ if ((1048575 & 2 + hx) < 3) {
18799
+ if (f == e_log_zero) {
18800
+ if (k == 0) {
18801
+ return e_log_zero;
18802
+ } else {
18803
+ dk = k;
18804
+ return dk * e_log_ln2_hi + dk * e_log_ln2_lo;
18805
+ }
18806
+ }
18807
+ R = f * f * (0.5 - 0.3333333333333333 * f);
18808
+ if (k == 0) {
18809
+ return f - R;
18810
+ } else {
18811
+ dk = k;
18812
+ return dk * e_log_ln2_hi - (R - dk * e_log_ln2_lo - f);
18813
+ }
18814
+ }
18815
+ s = f / (2 + f);
18816
+ dk = k;
18817
+ z = s * s;
18818
+ i = hx - 398458 | 0;
18819
+ w = z * z;
18820
+ j = 440401 - hx | 0;
18821
+ t1 = w * (e_log_Lg2 + w * (e_log_Lg4 + w * e_log_Lg6));
18822
+ t2 = z * (e_log_Lg1 + w * (e_log_Lg3 + w * (e_log_Lg5 + w * e_log_Lg7)));
18823
+ i = i | j | 0;
18824
+ R = t2 + t1;
18825
+ if (i > 0) {
18826
+ hfsq = 0.5 * f * f;
18827
+ if (k == 0) {
18828
+ return f - (hfsq - s * (hfsq + R));
18829
+ } else {
18830
+ return dk * e_log_ln2_hi - (hfsq - (s * (hfsq + R) + dk * e_log_ln2_lo) - f);
18831
+ }
18832
+ } else {
18833
+ if (k == 0) {
18834
+ return f - s * (f - R);
18835
+ } else {
18836
+ return dk * e_log_ln2_hi - (s * (f - R) - dk * e_log_ln2_lo - f);
18837
+ }
18838
+ }
18839
+ }
18840
+ var e_log10_two54 = 18014398509481984;
18841
+ var e_log10_ivln10 = 0.4342944819032518;
18842
+ var e_log10_log10_2hi = 0.30102999566361177;
18843
+ var e_log10_log10_2lo = 3694239077158931e-28;
18844
+ var e_log10_zero = 0;
18845
+ function kernel___ieee754_log10(x) {
18846
+ let y = 0;
18847
+ let z = 0;
18848
+ let i = 0;
18849
+ let k = 0;
18850
+ let hx = 0;
18851
+ let lx = 0;
18852
+ hx = highWord(x) | 0;
18853
+ lx = lowWord(x) >>> 0;
18854
+ k = 0 | 0;
18855
+ if (hx < 1048576) {
18856
+ if (((hx & 2147483647) >>> 0 | lx >>> 0) >>> 0 >>> 0 == 0 >>> 0) {
18857
+ return -e_log10_two54 / e_log10_zero;
18858
+ }
18859
+ if (hx < 0) {
18860
+ return (x - x) / e_log10_zero;
18861
+ }
18862
+ k = k - 54 | 0;
18863
+ x = x * e_log10_two54;
18864
+ hx = highWord(x) | 0;
18865
+ }
18866
+ if (hx >= 2146435072) {
18867
+ return x + x;
18868
+ }
18869
+ k = k + ((hx >> 20) - 1023) | 0;
18870
+ i = (k >>> 0 >>> 0 & 2147483648 >>> 0) >>> 0 >>> 31 | 0;
18871
+ hx = hx & 1048575 | 1023 - i << 20 | 0;
18872
+ y = k + i;
18873
+ x = withHighWord(x, hx | 0);
18874
+ z = y * e_log10_log10_2lo + e_log10_ivln10 * kernel___ieee754_log(x);
18875
+ return z + y * e_log10_log10_2hi;
18876
+ }
18877
+ function kernel_sin(x) {
18878
+ const y = s_sin_y;
18879
+ const z = 0;
18880
+ let n = 0;
18881
+ let ix = 0;
18882
+ ix = highWord(x) | 0;
18883
+ ix = ix & 2147483647 | 0;
18884
+ if (ix <= 1072243195) {
18885
+ return kernel___kernel_sin(x, z, 0);
18886
+ } else {
18887
+ if (ix >= 2146435072) {
18888
+ return x - x;
18889
+ } else {
18890
+ n = kernel___ieee754_rem_pio2(x, y) | 0;
18891
+ switch (n & 3) {
18892
+ case 0:
18893
+ return kernel___kernel_sin(y[0], y[1], 1);
18894
+ case 1:
18895
+ return kernel___kernel_cos(y[0], y[1]);
18896
+ case 2:
18897
+ return -kernel___kernel_sin(y[0], y[1], 1);
18898
+ default:
18899
+ return -kernel___kernel_cos(y[0], y[1]);
18900
+ }
18901
+ }
18902
+ }
18903
+ }
18904
+ function kernel_cos(x) {
18905
+ const y = s_cos_y;
18906
+ const z = 0;
18907
+ let n = 0;
18908
+ let ix = 0;
18909
+ ix = highWord(x) | 0;
18910
+ ix = ix & 2147483647 | 0;
18911
+ if (ix <= 1072243195) {
18912
+ return kernel___kernel_cos(x, z);
18913
+ } else {
18914
+ if (ix >= 2146435072) {
18915
+ return x - x;
18916
+ } else {
18917
+ n = kernel___ieee754_rem_pio2(x, y) | 0;
18918
+ switch (n & 3) {
18919
+ case 0:
18920
+ return kernel___kernel_cos(y[0], y[1]);
18921
+ case 1:
18922
+ return -kernel___kernel_sin(y[0], y[1], 1);
18923
+ case 2:
18924
+ return -kernel___kernel_cos(y[0], y[1]);
18925
+ default:
18926
+ return kernel___kernel_sin(y[0], y[1], 1);
18927
+ }
18928
+ }
18929
+ }
18930
+ }
18931
+ function kernel_tan(x) {
18932
+ const y = s_tan_y;
18933
+ const z = 0;
18934
+ let n = 0;
18935
+ let ix = 0;
18936
+ ix = highWord(x) | 0;
18937
+ ix = ix & 2147483647 | 0;
18938
+ if (ix <= 1072243195) {
18939
+ return kernel___kernel_tan(x, z, 1);
18940
+ } else {
18941
+ if (ix >= 2146435072) {
18942
+ return x - x;
18943
+ } else {
18944
+ n = kernel___ieee754_rem_pio2(x, y) | 0;
18945
+ return kernel___kernel_tan(y[0], y[1], 1 - ((n & 1) << 1));
18946
+ }
18947
+ }
18948
+ }
18949
+ var e_asin_one = 1;
18950
+ var e_asin_huge = 1e300;
18951
+ var e_asin_pio2_hi = 1.5707963267948966;
18952
+ var e_asin_pio2_lo = 6123233995736766e-32;
18953
+ var e_asin_pio4_hi = 0.7853981633974483;
18954
+ var e_asin_pS0 = 0.16666666666666666;
18955
+ var e_asin_pS1 = -0.3255658186224009;
18956
+ var e_asin_pS2 = 0.20121253213486293;
18957
+ var e_asin_pS3 = -0.04005553450067941;
18958
+ var e_asin_pS4 = 7915349942898145e-19;
18959
+ var e_asin_pS5 = 3479331075960212e-20;
18960
+ var e_asin_qS1 = -2.403394911734414;
18961
+ var e_asin_qS2 = 2.0209457602335057;
18962
+ var e_asin_qS3 = -0.6882839716054533;
18963
+ var e_asin_qS4 = 0.07703815055590194;
18964
+ function kernel___ieee754_asin(x) {
18965
+ let t = 0;
18966
+ let w = 0;
18967
+ let p = 0;
18968
+ let q = 0;
18969
+ let c = 0;
18970
+ let r = 0;
18971
+ let s = 0;
18972
+ let hx = 0;
18973
+ let ix = 0;
18974
+ hx = highWord(x) | 0;
18975
+ ix = hx & 2147483647 | 0;
18976
+ if (ix >= 1072693248) {
18977
+ if ((ix - 1072693248 | lowWord(x)) == 0) {
18978
+ return x * e_asin_pio2_hi + x * e_asin_pio2_lo;
18979
+ }
18980
+ return (x - x) / (x - x);
18981
+ } else {
18982
+ if (ix < 1071644672) {
18983
+ if (ix < 1044381696) {
18984
+ if (e_asin_huge + x > e_asin_one) {
18985
+ return x;
18986
+ }
18987
+ } else {
18988
+ t = x * x;
18989
+ }
18990
+ p = t * (e_asin_pS0 + t * (e_asin_pS1 + t * (e_asin_pS2 + t * (e_asin_pS3 + t * (e_asin_pS4 + t * e_asin_pS5)))));
18991
+ q = e_asin_one + t * (e_asin_qS1 + t * (e_asin_qS2 + t * (e_asin_qS3 + t * e_asin_qS4)));
18992
+ w = p / q;
18993
+ return x + x * w;
18994
+ }
18995
+ }
18996
+ w = e_asin_one - Math.abs(x);
18997
+ t = w * 0.5;
18998
+ p = t * (e_asin_pS0 + t * (e_asin_pS1 + t * (e_asin_pS2 + t * (e_asin_pS3 + t * (e_asin_pS4 + t * e_asin_pS5)))));
18999
+ q = e_asin_one + t * (e_asin_qS1 + t * (e_asin_qS2 + t * (e_asin_qS3 + t * e_asin_qS4)));
19000
+ s = Math.sqrt(t);
19001
+ if (ix >= 1072640819) {
19002
+ w = p / q;
19003
+ t = e_asin_pio2_hi - (2 * (s + s * w) - e_asin_pio2_lo);
19004
+ } else {
19005
+ w = s;
19006
+ w = withLowWord(w, 0 | 0);
19007
+ c = (t - w * w) / (s + w);
19008
+ r = p / q;
19009
+ p = 2 * s * r - (e_asin_pio2_lo - 2 * c);
19010
+ q = e_asin_pio4_hi - 2 * w;
19011
+ t = e_asin_pio4_hi - (p - q);
19012
+ }
19013
+ if (hx > 0) {
19014
+ return t;
19015
+ } else {
19016
+ return -t;
19017
+ }
19018
+ }
19019
+ var e_acos_one = 1;
19020
+ var e_acos_pi = 3.141592653589793;
19021
+ var e_acos_pio2_hi = 1.5707963267948966;
19022
+ var e_acos_pio2_lo = 6123233995736766e-32;
19023
+ var e_acos_pS0 = 0.16666666666666666;
19024
+ var e_acos_pS1 = -0.3255658186224009;
19025
+ var e_acos_pS2 = 0.20121253213486293;
19026
+ var e_acos_pS3 = -0.04005553450067941;
19027
+ var e_acos_pS4 = 7915349942898145e-19;
19028
+ var e_acos_pS5 = 3479331075960212e-20;
19029
+ var e_acos_qS1 = -2.403394911734414;
19030
+ var e_acos_qS2 = 2.0209457602335057;
19031
+ var e_acos_qS3 = -0.6882839716054533;
19032
+ var e_acos_qS4 = 0.07703815055590194;
19033
+ function kernel___ieee754_acos(x) {
19034
+ let z = 0;
19035
+ let p = 0;
19036
+ let q = 0;
19037
+ let r = 0;
19038
+ let w = 0;
19039
+ let s = 0;
19040
+ let c = 0;
19041
+ let df = 0;
19042
+ let hx = 0;
19043
+ let ix = 0;
19044
+ hx = highWord(x) | 0;
19045
+ ix = hx & 2147483647 | 0;
19046
+ if (ix >= 1072693248) {
19047
+ if ((ix - 1072693248 | lowWord(x)) == 0) {
19048
+ if (hx > 0) {
19049
+ return 0;
19050
+ } else {
19051
+ return e_acos_pi + 2 * e_acos_pio2_lo;
19052
+ }
19053
+ }
19054
+ return (x - x) / (x - x);
19055
+ }
19056
+ if (ix < 1071644672) {
19057
+ if (ix <= 1012924416) {
19058
+ return e_acos_pio2_hi + e_acos_pio2_lo;
19059
+ }
19060
+ z = x * x;
19061
+ p = z * (e_acos_pS0 + z * (e_acos_pS1 + z * (e_acos_pS2 + z * (e_acos_pS3 + z * (e_acos_pS4 + z * e_acos_pS5)))));
19062
+ q = e_acos_one + z * (e_acos_qS1 + z * (e_acos_qS2 + z * (e_acos_qS3 + z * e_acos_qS4)));
19063
+ r = p / q;
19064
+ return e_acos_pio2_hi - (x - (e_acos_pio2_lo - x * r));
19065
+ } else {
19066
+ if (hx < 0) {
19067
+ z = (e_acos_one + x) * 0.5;
19068
+ p = z * (e_acos_pS0 + z * (e_acos_pS1 + z * (e_acos_pS2 + z * (e_acos_pS3 + z * (e_acos_pS4 + z * e_acos_pS5)))));
19069
+ q = e_acos_one + z * (e_acos_qS1 + z * (e_acos_qS2 + z * (e_acos_qS3 + z * e_acos_qS4)));
19070
+ s = Math.sqrt(z);
19071
+ r = p / q;
19072
+ w = r * s - e_acos_pio2_lo;
19073
+ return e_acos_pi - 2 * (s + w);
19074
+ } else {
19075
+ z = (e_acos_one - x) * 0.5;
19076
+ s = Math.sqrt(z);
19077
+ df = s;
19078
+ df = withLowWord(df, 0 | 0);
19079
+ c = (z - df * df) / (s + df);
19080
+ p = z * (e_acos_pS0 + z * (e_acos_pS1 + z * (e_acos_pS2 + z * (e_acos_pS3 + z * (e_acos_pS4 + z * e_acos_pS5)))));
19081
+ q = e_acos_one + z * (e_acos_qS1 + z * (e_acos_qS2 + z * (e_acos_qS3 + z * e_acos_qS4)));
19082
+ r = p / q;
19083
+ w = r * s + c;
19084
+ return 2 * (df + w);
19085
+ }
19086
+ }
19087
+ }
19088
+ var s_atan_atanhi = [
19089
+ 0.4636476090008061,
19090
+ 0.7853981633974483,
19091
+ 0.982793723247329,
19092
+ 1.5707963267948966
19093
+ ];
19094
+ var s_atan_atanlo = [
19095
+ 22698777452961687e-33,
19096
+ 3061616997868383e-32,
19097
+ 13903311031230998e-33,
19098
+ 6123233995736766e-32
19099
+ ];
19100
+ var s_atan_aT = [
19101
+ 0.3333333333333293,
19102
+ -0.19999999999876483,
19103
+ 0.14285714272503466,
19104
+ -0.11111110405462356,
19105
+ 0.09090887133436507,
19106
+ -0.0769187620504483,
19107
+ 0.06661073137387531,
19108
+ -0.058335701337905735,
19109
+ 0.049768779946159324,
19110
+ -0.036531572744216916,
19111
+ 0.016285820115365782
19112
+ ];
19113
+ var s_atan_one = 1;
19114
+ var s_atan_huge = 1e300;
19115
+ function kernel_atan(x) {
19116
+ let w = 0;
19117
+ let s1 = 0;
19118
+ let s2 = 0;
19119
+ let z = 0;
19120
+ let ix = 0;
19121
+ let hx = 0;
19122
+ let id = 0;
19123
+ hx = highWord(x) | 0;
19124
+ ix = hx & 2147483647 | 0;
19125
+ if (ix >= 1141899264) {
19126
+ if (ix > 2146435072 || ix == 2146435072 && lowWord(x) != 0) {
19127
+ return x + x;
19128
+ }
19129
+ if (hx > 0) {
19130
+ return s_atan_atanhi[3] + s_atan_atanlo[3];
19131
+ } else {
19132
+ return -s_atan_atanhi[3] - s_atan_atanlo[3];
19133
+ }
19134
+ }
19135
+ if (ix < 1071382528) {
19136
+ if (ix < 1042284544) {
19137
+ if (s_atan_huge + x > s_atan_one) {
19138
+ return x;
19139
+ }
19140
+ }
19141
+ id = -1 | 0;
19142
+ } else {
19143
+ x = Math.abs(x);
19144
+ if (ix < 1072889856) {
19145
+ if (ix < 1072037888) {
19146
+ id = 0 | 0;
19147
+ x = (2 * x - s_atan_one) / (2 + x);
19148
+ } else {
19149
+ id = 1 | 0;
19150
+ x = (x - s_atan_one) / (x + s_atan_one);
19151
+ }
19152
+ } else {
19153
+ if (ix < 1073971200) {
19154
+ id = 2 | 0;
19155
+ x = (x - 1.5) / (s_atan_one + 1.5 * x);
19156
+ } else {
19157
+ id = 3 | 0;
19158
+ x = -1 / x;
19159
+ }
19160
+ }
19161
+ }
19162
+ z = x * x;
19163
+ w = z * z;
19164
+ s1 = z * (s_atan_aT[0] + w * (s_atan_aT[2] + w * (s_atan_aT[4] + w * (s_atan_aT[6] + w * (s_atan_aT[8] + w * s_atan_aT[10])))));
19165
+ s2 = w * (s_atan_aT[1] + w * (s_atan_aT[3] + w * (s_atan_aT[5] + w * (s_atan_aT[7] + w * s_atan_aT[9]))));
19166
+ if (id < 0) {
19167
+ return x - x * (s1 + s2);
19168
+ } else {
19169
+ z = s_atan_atanhi[id] - (x * (s1 + s2) - s_atan_atanlo[id] - x);
19170
+ return hx < 0 ? -z : z;
19171
+ }
19172
+ }
19173
+ var e_atan2_tiny = 1e-300;
19174
+ var e_atan2_zero = 0;
19175
+ var e_atan2_pi_o_4 = 0.7853981633974483;
19176
+ var e_atan2_pi_o_2 = 1.5707963267948966;
19177
+ var e_atan2_pi = 3.141592653589793;
19178
+ var e_atan2_pi_lo = 12246467991473532e-32;
19179
+ function kernel___ieee754_atan2(y, x) {
19180
+ let z = 0;
19181
+ let k = 0;
19182
+ let m = 0;
19183
+ let hx = 0;
19184
+ let hy = 0;
19185
+ let ix = 0;
19186
+ let iy = 0;
19187
+ let lx = 0;
19188
+ let ly = 0;
19189
+ hx = highWord(x) | 0;
19190
+ ix = hx & 2147483647 | 0;
19191
+ lx = lowWord(x) >>> 0;
19192
+ hy = highWord(y) | 0;
19193
+ iy = hy & 2147483647 | 0;
19194
+ ly = lowWord(y) >>> 0;
19195
+ if ((ix >>> 0 | (lx >>> 0 | -lx >>> 0) >>> 0 >>> 31 >>> 0) >>> 0 >>> 0 > 2146435072 >>> 0 || (iy >>> 0 | (ly >>> 0 | -ly >>> 0) >>> 0 >>> 31 >>> 0) >>> 0 >>> 0 > 2146435072 >>> 0) {
19196
+ return x + y;
19197
+ }
19198
+ if ((hx - 1072693248 >>> 0 | lx >>> 0) >>> 0 >>> 0 == 0 >>> 0) {
19199
+ return kernel_atan(y);
19200
+ }
19201
+ m = hy >> 31 & 1 | hx >> 30 & 2 | 0;
19202
+ if ((iy >>> 0 | ly >>> 0) >>> 0 >>> 0 == 0 >>> 0) {
19203
+ switch (m) {
19204
+ case 0:
19205
+ case 1:
19206
+ return y;
19207
+ case 2:
19208
+ return e_atan2_pi + e_atan2_tiny;
19209
+ case 3:
19210
+ return -e_atan2_pi - e_atan2_tiny;
19211
+ }
19212
+ }
19213
+ if ((ix >>> 0 | lx >>> 0) >>> 0 >>> 0 == 0 >>> 0) {
19214
+ return hy < 0 ? -e_atan2_pi_o_2 - e_atan2_tiny : e_atan2_pi_o_2 + e_atan2_tiny;
19215
+ }
19216
+ if (ix == 2146435072) {
19217
+ if (iy == 2146435072) {
19218
+ switch (m) {
19219
+ case 0:
19220
+ return e_atan2_pi_o_4 + e_atan2_tiny;
19221
+ case 1:
19222
+ return -e_atan2_pi_o_4 - e_atan2_tiny;
19223
+ case 2:
19224
+ return 3 * e_atan2_pi_o_4 + e_atan2_tiny;
19225
+ case 3:
19226
+ return -3 * e_atan2_pi_o_4 - e_atan2_tiny;
19227
+ }
19228
+ } else {
19229
+ switch (m) {
19230
+ case 0:
19231
+ return e_atan2_zero;
19232
+ case 1:
19233
+ return -e_atan2_zero;
19234
+ case 2:
19235
+ return e_atan2_pi + e_atan2_tiny;
19236
+ case 3:
19237
+ return -e_atan2_pi - e_atan2_tiny;
19238
+ }
19239
+ }
19240
+ }
19241
+ if (iy == 2146435072) {
19242
+ return hy < 0 ? -e_atan2_pi_o_2 - e_atan2_tiny : e_atan2_pi_o_2 + e_atan2_tiny;
19243
+ }
19244
+ k = iy - ix >> 20 | 0;
19245
+ if (k > 60) {
19246
+ z = e_atan2_pi_o_2 + 0.5 * e_atan2_pi_lo;
19247
+ } else {
19248
+ if (hx < 0 && k < -60) {
19249
+ z = 0;
19250
+ } else {
19251
+ z = kernel_atan(Math.abs(y / x));
19252
+ }
19253
+ }
19254
+ switch (m) {
19255
+ case 0:
19256
+ return z;
19257
+ case 1:
19258
+ z = withHighWord(z, highWord(z) ^ 2147483648 | 0);
19259
+ return z;
19260
+ case 2:
19261
+ return e_atan2_pi - (z - e_atan2_pi_lo);
19262
+ default:
19263
+ return z - e_atan2_pi_lo - e_atan2_pi;
19264
+ }
19265
+ }
19266
+ var e_rem_pio2_two_over_pi = [
19267
+ 10680707,
19268
+ 7228996,
19269
+ 1387004,
19270
+ 2578385,
19271
+ 16069853,
19272
+ 12639074,
19273
+ 9804092,
19274
+ 4427841,
19275
+ 16666979,
19276
+ 11263675,
19277
+ 12935607,
19278
+ 2387514,
19279
+ 4345298,
19280
+ 14681673,
19281
+ 3074569,
19282
+ 13734428,
19283
+ 16653803,
19284
+ 1880361,
19285
+ 10960616,
19286
+ 8533493,
19287
+ 3062596,
19288
+ 8710556,
19289
+ 7349940,
19290
+ 6258241,
19291
+ 3772886,
19292
+ 3769171,
19293
+ 3798172,
19294
+ 8675211,
19295
+ 12450088,
19296
+ 3874808,
19297
+ 9961438,
19298
+ 366607,
19299
+ 15675153,
19300
+ 9132554,
19301
+ 7151469,
19302
+ 3571407,
19303
+ 2607881,
19304
+ 12013382,
19305
+ 4155038,
19306
+ 6285869,
19307
+ 7677882,
19308
+ 13102053,
19309
+ 15825725,
19310
+ 473591,
19311
+ 9065106,
19312
+ 15363067,
19313
+ 6271263,
19314
+ 9264392,
19315
+ 5636912,
19316
+ 4652155,
19317
+ 7056368,
19318
+ 13614112,
19319
+ 10155062,
19320
+ 1944035,
19321
+ 9527646,
19322
+ 15080200,
19323
+ 6658437,
19324
+ 6231200,
19325
+ 6832269,
19326
+ 16767104,
19327
+ 5075751,
19328
+ 3212806,
19329
+ 1398474,
19330
+ 7579849,
19331
+ 6349435,
19332
+ 12618859
19333
+ ];
19334
+ var e_rem_pio2_npio2_hw = [
19335
+ 1073291771,
19336
+ 1074340347,
19337
+ 1074977148,
19338
+ 1075388923,
19339
+ 1075800698,
19340
+ 1076025724,
19341
+ 1076231611,
19342
+ 1076437499,
19343
+ 1076643386,
19344
+ 1076849274,
19345
+ 1076971356,
19346
+ 1077074300,
19347
+ 1077177244,
19348
+ 1077280187,
19349
+ 1077383131,
19350
+ 1077486075,
19351
+ 1077589019,
19352
+ 1077691962,
19353
+ 1077794906,
19354
+ 1077897850,
19355
+ 1077968460,
19356
+ 1078019932,
19357
+ 1078071404,
19358
+ 1078122876,
19359
+ 1078174348,
19360
+ 1078225820,
19361
+ 1078277292,
19362
+ 1078328763,
19363
+ 1078380235,
19364
+ 1078431707,
19365
+ 1078483179,
19366
+ 1078534651
19367
+ ];
19368
+ var e_rem_pio2_zero = 0;
19369
+ var e_rem_pio2_half = 0.5;
19370
+ var e_rem_pio2_two24 = 16777216;
19371
+ var e_rem_pio2_invpio2 = 0.6366197723675814;
19372
+ var e_rem_pio2_pio2_1 = 1.5707963267341256;
19373
+ var e_rem_pio2_pio2_1t = 6077100506506192e-26;
19374
+ var e_rem_pio2_pio2_2 = 6077100506303966e-26;
19375
+ var e_rem_pio2_pio2_2t = 20222662487959506e-37;
19376
+ var e_rem_pio2_pio2_3 = 20222662487111665e-37;
19377
+ var e_rem_pio2_pio2_3t = 84784276603689e-45;
19378
+ function kernel___ieee754_rem_pio2(x, y) {
19379
+ let z = 0;
19380
+ let w = 0;
19381
+ let t = 0;
19382
+ let r = 0;
19383
+ let fn = 0;
19384
+ const tx = e_rem_pio2_tx;
19385
+ let e0 = 0;
19386
+ let i = 0;
19387
+ let j = 0;
19388
+ let nx = 0;
19389
+ let n = 0;
19390
+ let ix = 0;
19391
+ let hx = 0;
19392
+ hx = highWord(x) | 0;
19393
+ ix = hx & 2147483647 | 0;
19394
+ if (ix <= 1072243195) {
19395
+ y[0] = x;
19396
+ y[1] = 0;
19397
+ return 0 | 0;
19398
+ }
19399
+ if (ix < 1073928572) {
19400
+ if (hx > 0) {
19401
+ z = x - e_rem_pio2_pio2_1;
19402
+ if (ix != 1073291771) {
19403
+ y[0] = z - e_rem_pio2_pio2_1t;
19404
+ y[1] = z - y[0] - e_rem_pio2_pio2_1t;
19405
+ } else {
19406
+ z = z - e_rem_pio2_pio2_2;
19407
+ y[0] = z - e_rem_pio2_pio2_2t;
19408
+ y[1] = z - y[0] - e_rem_pio2_pio2_2t;
19409
+ }
19410
+ return 1 | 0;
19411
+ } else {
19412
+ z = x + e_rem_pio2_pio2_1;
19413
+ if (ix != 1073291771) {
19414
+ y[0] = z + e_rem_pio2_pio2_1t;
19415
+ y[1] = z - y[0] + e_rem_pio2_pio2_1t;
19416
+ } else {
19417
+ z = z + e_rem_pio2_pio2_2;
19418
+ y[0] = z + e_rem_pio2_pio2_2t;
19419
+ y[1] = z - y[0] + e_rem_pio2_pio2_2t;
19420
+ }
19421
+ return -1 | 0;
19422
+ }
19423
+ }
19424
+ if (ix <= 1094263291) {
19425
+ t = Math.abs(x);
19426
+ n = t * e_rem_pio2_invpio2 + e_rem_pio2_half | 0 | 0;
19427
+ fn = n;
19428
+ r = t - fn * e_rem_pio2_pio2_1;
19429
+ w = fn * e_rem_pio2_pio2_1t;
19430
+ if (n < 32 && ix != e_rem_pio2_npio2_hw[n - 1]) {
19431
+ y[0] = r - w;
19432
+ } else {
19433
+ j = ix >> 20 | 0;
19434
+ y[0] = r - w;
19435
+ i = j - (highWord(y[0]) >> 20 & 2047) | 0;
19436
+ if (i > 16) {
19437
+ t = r;
19438
+ w = fn * e_rem_pio2_pio2_2;
19439
+ r = t - w;
19440
+ w = fn * e_rem_pio2_pio2_2t - (t - r - w);
19441
+ y[0] = r - w;
19442
+ i = j - (highWord(y[0]) >> 20 & 2047) | 0;
19443
+ if (i > 49) {
19444
+ t = r;
19445
+ w = fn * e_rem_pio2_pio2_3;
19446
+ r = t - w;
19447
+ w = fn * e_rem_pio2_pio2_3t - (t - r - w);
19448
+ y[0] = r - w;
19449
+ }
19450
+ }
19451
+ }
19452
+ y[1] = r - y[0] - w;
19453
+ if (hx < 0) {
19454
+ y[0] = -y[0];
19455
+ y[1] = -y[1];
19456
+ return -n | 0;
19457
+ } else {
19458
+ return n | 0;
19459
+ }
19460
+ }
19461
+ if (ix >= 2146435072) {
19462
+ y[0] = y[1] = x - x;
19463
+ return 0 | 0;
19464
+ }
19465
+ z = withLowWord(z, lowWord(x) | 0);
19466
+ e0 = (ix >> 20) - 1046 | 0;
19467
+ z = withHighWord(z, ix - (e0 << 20) | 0);
19468
+ for (i = 0 | 0; i < 2; i++) {
19469
+ tx[i] = z | 0;
19470
+ z = (z - tx[i]) * e_rem_pio2_two24;
19471
+ }
19472
+ tx[2] = z;
19473
+ nx = 3 | 0;
19474
+ while (tx[nx - 1] == e_rem_pio2_zero) {
19475
+ nx--;
19476
+ }
19477
+ n = kernel___kernel_rem_pio2(tx, y, e0, nx, 2, e_rem_pio2_two_over_pi) | 0;
19478
+ if (hx < 0) {
19479
+ y[0] = -y[0];
19480
+ y[1] = -y[1];
19481
+ return -n | 0;
19482
+ }
19483
+ return n | 0;
19484
+ }
19485
+ var k_rem_pio2_init_jk = [2, 3, 4, 6];
19486
+ var k_rem_pio2_PIo2 = [
19487
+ 1.570796251296997,
19488
+ 7549789415861596e-23,
19489
+ 5390302529957765e-30,
19490
+ 3282003415807913e-37,
19491
+ 1270655753080676e-44,
19492
+ 12293330898111133e-52,
19493
+ 27337005381646456e-60,
19494
+ 21674168387780482e-67
19495
+ ];
19496
+ var k_rem_pio2_zero = 0;
19497
+ var k_rem_pio2_one = 1;
19498
+ var k_rem_pio2_two24 = 16777216;
19499
+ var k_rem_pio2_twon24 = 5960464477539063e-23;
19500
+ function kernel___kernel_rem_pio2(x, y, e0, nx, prec, ipio2) {
19501
+ let jz = 0;
19502
+ let jx = 0;
19503
+ let jv = 0;
19504
+ let jp = 0;
19505
+ let jk = 0;
19506
+ let carry = 0;
19507
+ let n = 0;
19508
+ const iq = k_rem_pio2_iq;
19509
+ let i = 0;
19510
+ let j = 0;
19511
+ let k = 0;
19512
+ let m = 0;
19513
+ let q0 = 0;
19514
+ let ih = 0;
19515
+ let z = 0;
19516
+ let fw = 0;
19517
+ const f = k_rem_pio2_f;
19518
+ const fq = k_rem_pio2_fq;
19519
+ const q = k_rem_pio2_q;
19520
+ jk = k_rem_pio2_init_jk[prec] | 0;
19521
+ jp = jk | 0;
19522
+ jx = nx - 1 | 0;
19523
+ jv = (e0 - 3) / 24 | 0 | 0;
19524
+ if (jv < 0) {
19525
+ jv = 0 | 0;
19526
+ }
19527
+ q0 = e0 - 24 * (jv + 1) | 0;
19528
+ j = jv - jx | 0;
19529
+ m = jx + jk | 0;
19530
+ for (i = 0 | 0; i <= m; i++, j++) {
19531
+ f[i] = j < 0 ? k_rem_pio2_zero : ipio2[j];
19532
+ }
19533
+ for (i = 0 | 0; i <= jk; i++) {
19534
+ for (j = 0 | 0, fw = 0; j <= jx; j++) {
19535
+ fw = fw + x[j] * f[jx + i - j];
19536
+ }
19537
+ q[i] = fw;
19538
+ }
19539
+ jz = jk | 0;
19540
+ while (true) {
19541
+ for (i = 0 | 0, j = jz | 0, z = q[jz]; j > 0; i++, j--) {
19542
+ fw = k_rem_pio2_twon24 * z | 0;
19543
+ iq[i] = z - k_rem_pio2_two24 * fw | 0 | 0;
19544
+ z = q[j - 1] + fw;
19545
+ }
19546
+ z = kernel_scalbn(z, q0);
19547
+ z = z - 8 * Math.floor(z * 0.125);
19548
+ n = z | 0 | 0;
19549
+ z = z - n;
19550
+ ih = 0 | 0;
19551
+ if (q0 > 0) {
19552
+ i = iq[jz - 1] >> 24 - q0 | 0;
19553
+ n = n + i | 0;
19554
+ iq[jz - 1] = iq[jz - 1] - (i << 24 - q0) | 0;
19555
+ ih = iq[jz - 1] >> 23 - q0 | 0;
19556
+ } else {
19557
+ if (q0 == 0) {
19558
+ ih = iq[jz - 1] >> 23 | 0;
19559
+ } else {
19560
+ if (z >= 0.5) {
19561
+ ih = 2 | 0;
19562
+ }
19563
+ }
19564
+ }
19565
+ if (ih > 0) {
19566
+ n = n + 1 | 0;
19567
+ carry = 0 | 0;
19568
+ for (i = 0 | 0; i < jz; i++) {
19569
+ j = iq[i] | 0;
19570
+ if (carry == 0) {
19571
+ if (j != 0) {
19572
+ carry = 1 | 0;
19573
+ iq[i] = 16777216 - j | 0;
19574
+ }
19575
+ } else {
19576
+ iq[i] = 16777215 - j | 0;
19577
+ }
19578
+ }
19579
+ if (q0 > 0) {
19580
+ switch (q0) {
19581
+ case 1:
19582
+ iq[jz - 1] = iq[jz - 1] & 8388607 | 0;
19583
+ break;
19584
+ case 2:
19585
+ iq[jz - 1] = iq[jz - 1] & 4194303 | 0;
19586
+ break;
19587
+ }
19588
+ }
19589
+ if (ih == 2) {
19590
+ z = k_rem_pio2_one - z;
19591
+ if (carry != 0) {
19592
+ z = z - kernel_scalbn(k_rem_pio2_one, q0);
19593
+ }
19594
+ }
19595
+ }
19596
+ if (z == k_rem_pio2_zero) {
19597
+ j = 0 | 0;
19598
+ for (i = jz - 1 | 0; i >= jk; i--) {
19599
+ j = j | iq[i] | 0;
19600
+ }
19601
+ if (j == 0) {
19602
+ for (k = 1 | 0; iq[jk - k] == 0; k++) {
19603
+ }
19604
+ for (i = jz + 1 | 0; i <= jz + k; i++) {
19605
+ f[jx + i] = ipio2[jv + i];
19606
+ for (j = 0 | 0, fw = 0; j <= jx; j++) {
19607
+ fw = fw + x[j] * f[jx + i - j];
19608
+ }
19609
+ q[i] = fw;
19610
+ }
19611
+ jz = jz + k | 0;
19612
+ continue;
19613
+ }
19614
+ }
19615
+ break;
19616
+ }
19617
+ if (z == 0) {
19618
+ jz = jz - 1 | 0;
19619
+ q0 = q0 - 24 | 0;
19620
+ while (iq[jz] == 0) {
19621
+ jz--;
19622
+ q0 = q0 - 24 | 0;
19623
+ }
19624
+ } else {
19625
+ z = kernel_scalbn(z, -q0);
19626
+ if (z >= k_rem_pio2_two24) {
19627
+ fw = k_rem_pio2_twon24 * z | 0;
19628
+ iq[jz] = z - k_rem_pio2_two24 * fw | 0 | 0;
19629
+ jz = jz + 1 | 0;
19630
+ q0 = q0 + 24 | 0;
19631
+ iq[jz] = fw | 0 | 0;
19632
+ } else {
19633
+ iq[jz] = z | 0 | 0;
19634
+ }
19635
+ }
19636
+ fw = kernel_scalbn(k_rem_pio2_one, q0);
19637
+ for (i = jz | 0; i >= 0; i--) {
19638
+ q[i] = fw * iq[i];
19639
+ fw = fw * k_rem_pio2_twon24;
19640
+ }
19641
+ for (i = jz | 0; i >= 0; i--) {
19642
+ for (fw = 0, k = 0 | 0; k <= jp && k <= jz - i; k++) {
19643
+ fw = fw + k_rem_pio2_PIo2[k] * q[i + k];
19644
+ }
19645
+ fq[jz - i] = fw;
19646
+ }
19647
+ switch (prec) {
19648
+ case 0:
19649
+ fw = 0;
19650
+ for (i = jz | 0; i >= 0; i--) {
19651
+ fw = fw + fq[i];
19652
+ }
19653
+ y[0] = ih == 0 ? fw : -fw;
19654
+ break;
19655
+ case 1:
19656
+ case 2:
19657
+ fw = 0;
19658
+ for (i = jz | 0; i >= 0; i--) {
19659
+ fw = fw + fq[i];
19660
+ }
19661
+ y[0] = ih == 0 ? fw : -fw;
19662
+ fw = fq[0] - fw;
19663
+ for (i = 1 | 0; i <= jz; i++) {
19664
+ fw = fw + fq[i];
19665
+ }
19666
+ y[1] = ih == 0 ? fw : -fw;
19667
+ break;
19668
+ case 3:
19669
+ for (i = jz | 0; i > 0; i--) {
19670
+ fw = fq[i - 1] + fq[i];
19671
+ fq[i] = fq[i] + (fq[i - 1] - fw);
19672
+ fq[i - 1] = fw;
19673
+ }
19674
+ for (i = jz | 0; i > 1; i--) {
19675
+ fw = fq[i - 1] + fq[i];
19676
+ fq[i] = fq[i] + (fq[i - 1] - fw);
19677
+ fq[i - 1] = fw;
19678
+ }
19679
+ for (fw = 0, i = jz | 0; i >= 2; i--) {
19680
+ fw = fw + fq[i];
19681
+ }
19682
+ if (ih == 0) {
19683
+ y[0] = fq[0];
19684
+ y[1] = fq[1];
19685
+ y[2] = fw;
19686
+ } else {
19687
+ y[0] = -fq[0];
19688
+ y[1] = -fq[1];
19689
+ y[2] = -fw;
19690
+ }
19691
+ break;
19692
+ }
19693
+ return n & 7 | 0;
19694
+ }
19695
+ var k_sin_half = 0.5;
19696
+ var k_sin_S1 = -0.16666666666666632;
19697
+ var k_sin_S2 = 0.00833333333332249;
19698
+ var k_sin_S3 = -1984126982985795e-19;
19699
+ var k_sin_S4 = 27557313707070068e-22;
19700
+ var k_sin_S5 = -25050760253406863e-24;
19701
+ var k_sin_S6 = 158969099521155e-24;
19702
+ function kernel___kernel_sin(x, y, iy) {
19703
+ let z = 0;
19704
+ let r = 0;
19705
+ let v = 0;
19706
+ let ix = 0;
19707
+ ix = highWord(x) & 2147483647 | 0;
19708
+ if (ix < 1044381696) {
19709
+ if ((x | 0) == 0) {
19710
+ return x;
19711
+ }
19712
+ }
19713
+ z = x * x;
19714
+ v = z * x;
19715
+ r = k_sin_S2 + z * (k_sin_S3 + z * (k_sin_S4 + z * (k_sin_S5 + z * k_sin_S6)));
19716
+ if (iy == 0) {
19717
+ return x + v * (k_sin_S1 + z * r);
19718
+ } else {
19719
+ return x - (z * (k_sin_half * y - v * r) - y - v * k_sin_S1);
19720
+ }
19721
+ }
19722
+ var k_cos_one = 1;
19723
+ var k_cos_C1 = 0.0416666666666666;
19724
+ var k_cos_C2 = -0.001388888888887411;
19725
+ var k_cos_C3 = 2480158728947673e-20;
19726
+ var k_cos_C4 = -27557314351390663e-23;
19727
+ var k_cos_C5 = 2087572321298175e-24;
19728
+ var k_cos_C6 = -11359647557788195e-27;
19729
+ function kernel___kernel_cos(x, y) {
19730
+ let a = 0;
19731
+ let hz = 0;
19732
+ let z = 0;
19733
+ let r = 0;
19734
+ let qx = 0;
19735
+ let ix = 0;
19736
+ ix = highWord(x) & 2147483647 | 0;
19737
+ if (ix < 1044381696) {
19738
+ if ((x | 0) == 0) {
19739
+ return k_cos_one;
19740
+ }
19741
+ }
19742
+ z = x * x;
19743
+ r = z * (k_cos_C1 + z * (k_cos_C2 + z * (k_cos_C3 + z * (k_cos_C4 + z * (k_cos_C5 + z * k_cos_C6)))));
19744
+ if (ix < 1070805811) {
19745
+ return k_cos_one - (0.5 * z - (z * r - x * y));
19746
+ } else {
19747
+ if (ix > 1072234496) {
19748
+ qx = 0.28125;
19749
+ } else {
19750
+ qx = withHighWord(qx, ix - 2097152 | 0);
19751
+ qx = withLowWord(qx, 0 | 0);
19752
+ }
19753
+ hz = 0.5 * z - qx;
19754
+ a = k_cos_one - qx;
19755
+ return a - (hz - (z * r - x * y));
19756
+ }
19757
+ }
19758
+ var k_tan_xxx = [
19759
+ 0.3333333333333341,
19760
+ 0.13333333333320124,
19761
+ 0.05396825397622605,
19762
+ 0.021869488294859542,
19763
+ 0.0088632398235993,
19764
+ 0.0035920791075913124,
19765
+ 0.0014562094543252903,
19766
+ 5880412408202641e-19,
19767
+ 2464631348184699e-19,
19768
+ 7817944429395571e-20,
19769
+ 7140724913826082e-20,
19770
+ -18558637485527546e-21,
19771
+ 2590730518636337e-20,
19772
+ 1,
19773
+ 0.7853981633974483,
19774
+ 3061616997868383e-32
19775
+ ];
19776
+ function kernel___kernel_tan(x, y, iy) {
19777
+ let z = 0;
19778
+ let r = 0;
19779
+ let v = 0;
19780
+ let w = 0;
19781
+ let s = 0;
19782
+ let ix = 0;
19783
+ let hx = 0;
19784
+ hx = highWord(x) | 0;
19785
+ ix = hx & 2147483647 | 0;
19786
+ if (ix < 1043333120) {
19787
+ if ((x | 0) == 0) {
19788
+ if ((ix | lowWord(x) | iy + 1) == 0) {
19789
+ return k_tan_xxx[13] / Math.abs(x);
19790
+ } else {
19791
+ if (iy == 1) {
19792
+ return x;
19793
+ } else {
19794
+ let a = 0;
19795
+ let t = 0;
19796
+ z = w = x + y;
19797
+ z = withLowWord(z, 0 | 0);
19798
+ v = y - (z - x);
19799
+ t = a = -k_tan_xxx[13] / w;
19800
+ t = withLowWord(t, 0 | 0);
19801
+ s = k_tan_xxx[13] + t * z;
19802
+ return t + a * (s + t * v);
19803
+ }
19804
+ }
19805
+ }
19806
+ }
19807
+ if (ix >= 1072010280) {
19808
+ if (hx < 0) {
19809
+ x = -x;
19810
+ y = -y;
19811
+ }
19812
+ z = k_tan_xxx[14] - x;
19813
+ w = k_tan_xxx[15] - y;
19814
+ x = z + w;
19815
+ y = 0;
19816
+ }
19817
+ z = x * x;
19818
+ w = z * z;
19819
+ r = k_tan_xxx[1] + w * (k_tan_xxx[3] + w * (k_tan_xxx[5] + w * (k_tan_xxx[7] + w * (k_tan_xxx[9] + w * k_tan_xxx[11]))));
19820
+ v = z * (k_tan_xxx[2] + w * (k_tan_xxx[4] + w * (k_tan_xxx[6] + w * (k_tan_xxx[8] + w * (k_tan_xxx[10] + w * k_tan_xxx[12])))));
19821
+ s = z * x;
19822
+ r = y + z * (s * (r + v) + y);
19823
+ r = r + k_tan_xxx[0] * s;
19824
+ w = x + r;
19825
+ if (ix >= 1072010280) {
19826
+ v = iy;
19827
+ return (1 - (hx >> 30 & 2)) * (v - 2 * (x - (w * w / (w + v) - r)));
19828
+ }
19829
+ if (iy == 1) {
19830
+ return w;
19831
+ } else {
19832
+ let a = 0;
19833
+ let t = 0;
19834
+ z = w;
19835
+ z = withLowWord(z, 0 | 0);
19836
+ v = r - (z - x);
19837
+ t = a = -1 / w;
19838
+ t = withLowWord(t, 0 | 0);
19839
+ s = 1 + t * z;
19840
+ return t + a * (s + t * v);
19841
+ }
19842
+ }
19843
+ var s_scalbn_two54 = 18014398509481984;
19844
+ var s_scalbn_twom54 = 5551115123125783e-32;
19845
+ var s_scalbn_huge = 1e300;
19846
+ var s_scalbn_tiny = 1e-300;
19847
+ function kernel_scalbn(x, n) {
19848
+ let k = 0;
19849
+ let hx = 0;
19850
+ let lx = 0;
19851
+ hx = highWord(x) | 0;
19852
+ lx = lowWord(x) | 0;
19853
+ k = (hx & 2146435072) >> 20 | 0;
19854
+ if (k == 0) {
19855
+ if ((lx | hx & 2147483647) == 0) {
19856
+ return x;
19857
+ }
19858
+ x = x * s_scalbn_two54;
19859
+ hx = highWord(x) | 0;
19860
+ k = ((hx & 2146435072) >> 20) - 54 | 0;
19861
+ if (n < -5e4) {
19862
+ return s_scalbn_tiny * x;
19863
+ }
19864
+ }
19865
+ if (k == 2047) {
19866
+ return x + x;
19867
+ }
19868
+ k = k + n | 0;
19869
+ if (k > 2046) {
19870
+ return s_scalbn_huge * copysign(s_scalbn_huge, x);
19871
+ }
19872
+ if (k > 0) {
19873
+ x = withHighWord(
19874
+ x,
19875
+ ((hx >>> 0 & 2148532223 >>> 0) >>> 0 >>> 0 | k << 20 >>> 0) >>> 0 | 0
19876
+ );
19877
+ return x;
19878
+ }
19879
+ if (k <= -54) {
19880
+ if (n > 5e4) {
19881
+ return s_scalbn_huge * copysign(s_scalbn_huge, x);
19882
+ } else {
19883
+ return s_scalbn_tiny * copysign(s_scalbn_tiny, x);
19884
+ }
19885
+ }
19886
+ k = k + 54 | 0;
19887
+ x = withHighWord(
19888
+ x,
19889
+ ((hx >>> 0 & 2148532223 >>> 0) >>> 0 >>> 0 | k << 20 >>> 0) >>> 0 | 0
19890
+ );
19891
+ return x * s_scalbn_twom54;
19892
+ }
19893
+ function pow(x, y) {
19894
+ return Math.fround(
19895
+ x == 1 || x == -1 && !Number.isFinite(y) && !Number.isNaN(y) ? 1 : kernel___ieee754_pow(x, y)
19896
+ );
19897
+ }
19898
+ function exp(x) {
19899
+ return Math.fround(kernel___ieee754_exp(x));
19900
+ }
19901
+ function log(x) {
19902
+ return Math.fround(kernel___ieee754_log(x));
19903
+ }
19904
+ function log10(x) {
19905
+ return Math.fround(kernel___ieee754_log10(x));
19906
+ }
19907
+ function sin(x) {
19908
+ return Math.fround(kernel_sin(x));
19909
+ }
19910
+ function cos(x) {
19911
+ return Math.fround(kernel_cos(x));
19912
+ }
19913
+ function tan(x) {
19914
+ return Math.fround(kernel_tan(x));
19915
+ }
19916
+ function asin(x) {
19917
+ return Math.fround(kernel___ieee754_asin(x));
19918
+ }
19919
+ function acos(x) {
19920
+ return Math.fround(kernel___ieee754_acos(x));
19921
+ }
19922
+ function atan(x) {
19923
+ return Math.fround(kernel_atan(x));
19924
+ }
19925
+ function atan2(x, y) {
19926
+ return Math.fround(kernel___ieee754_atan2(x, y));
19927
+ }
19928
+
19929
+ // ../packages/neoscript-runtime/src/neoscript/math/extended-math.ts
19930
+ function clamp(value, min, max) {
19931
+ if (value < min) return min;
19932
+ if (value > max) return max;
19933
+ return value;
19934
+ }
19935
+ function repeat(t, length) {
19936
+ const quotient = Math.fround(t / length);
19937
+ if (!Number.isFinite(quotient)) return NaN;
19938
+ const multiple = Math.fround(Math.floor(quotient) * length);
19939
+ if (!Number.isFinite(multiple)) return NaN;
19940
+ return clamp(Math.fround(t - multiple), 0, length);
19941
+ }
19942
+ function requireRepeatDomain(name, t, length) {
19943
+ if (!Number.isFinite(t)) {
19944
+ throw new NSGetterRuntimeError(`Math.${name} requires finite t.`, {
19945
+ errorClassId: NEO_ERROR_CLASS_IDS.NeoArgumentError
19946
+ });
19947
+ }
19948
+ if (!Number.isFinite(length)) {
19949
+ throw new NSGetterRuntimeError(`Math.${name} requires finite length.`, {
19950
+ errorClassId: NEO_ERROR_CLASS_IDS.NeoArgumentError
19951
+ });
19952
+ }
19953
+ if (length <= 0) {
19954
+ throw new NSGetterRuntimeError(`Math.${name} requires length > 0.`, {
19955
+ errorClassId: NEO_ERROR_CLASS_IDS.NeoArgumentError
19956
+ });
19957
+ }
19958
+ }
19959
+ function evaluateExtendedMath(op, a, b = 0, c = 0) {
19960
+ switch (op) {
19961
+ case "pow":
19962
+ return pow(a, b);
19963
+ case "exp":
19964
+ return exp(a);
19965
+ case "log":
19966
+ return log(a);
19967
+ case "log10":
19968
+ return log10(a);
19969
+ case "sin":
19970
+ return sin(a);
19971
+ case "cos":
19972
+ return cos(a);
19973
+ case "tan":
19974
+ return tan(a);
19975
+ case "asin":
19976
+ return asin(a);
19977
+ case "acos":
19978
+ return acos(a);
19979
+ case "atan":
19980
+ return atan(a);
19981
+ case "atan2":
19982
+ return atan2(a, b);
19983
+ case "lerp":
19984
+ return Math.fround(a + Math.fround(Math.fround(b - a) * clamp(c, 0, 1)));
19985
+ case "inverselerp":
19986
+ return a === b ? 0 : clamp(Math.fround(Math.fround(c - a) / Math.fround(b - a)), 0, 1);
19987
+ case "movetowards": {
19988
+ const delta = Math.fround(b - a);
19989
+ if (Math.abs(delta) <= c) return b;
19990
+ const sign = delta >= 0 ? 1 : -1;
19991
+ return Math.fround(a + Math.fround(sign * c));
19992
+ }
19993
+ case "repeat":
19994
+ requireRepeatDomain("Repeat", a, b);
19995
+ return repeat(a, b);
19996
+ case "pingpong": {
19997
+ requireRepeatDomain("PingPong", a, b);
19998
+ const period = Math.fround(2 * b);
19999
+ if (!Number.isFinite(period)) return NaN;
20000
+ return Math.fround(b - Math.abs(Math.fround(repeat(a, period) - b)));
20001
+ }
20002
+ default:
20003
+ throw new NSGetterRuntimeError(`Unknown extended math op '${op}'.`);
20004
+ }
20005
+ }
20006
+
17964
20007
  // ../packages/neoscript-runtime/src/neoscript/tuple-handle-identity.ts
17965
20008
  var TupleHandleIdentity = class {
17966
20009
  objects = /* @__PURE__ */ new WeakMap();
@@ -23244,6 +25287,7 @@ function evaluateNSGetterWithEffects(getter, ctx, argumentValues = [], options =
23244
25287
  const requestedWrites = [];
23245
25288
  const runtimeCtx = withEvaluationRuntime(ctx, requestedWrites);
23246
25289
  checkDeadline(runtimeCtx);
25290
+ const randomDrawCheckpoint = runtimeCtx.__executionState?.randomDraws ?? 0;
23247
25291
  const writes = runtimeCtx.__executionState?.writes ?? requestedWrites;
23248
25292
  const writeCheckpoint = writes.length;
23249
25293
  const creationCheckpoint = sessionCreationCheckpoint(runtimeCtx);
@@ -23368,6 +25412,8 @@ function evaluateNSGetterWithEffects(getter, ctx, argumentValues = [], options =
23368
25412
  }
23369
25413
  rejectEscapedLoopTransfer(result, "NeoScript getter");
23370
25414
  } catch (error) {
25415
+ if (error instanceof NSGetterRuntimeError && runtimeCtx.randomIdentity !== void 0 && isPendingId(runtimeCtx.randomIdentity) && (runtimeCtx.__executionState?.randomDraws ?? 0) > randomDrawCheckpoint)
25416
+ error.provisionalRandomFailure = true;
23371
25417
  finalizeConstructorAllocations(
23372
25418
  runtimeCtx,
23373
25419
  void 0,
@@ -23525,6 +25571,10 @@ function withEvaluationRuntime(ctx, writes) {
23525
25571
  __dirtyRuntimeSets: ctx.__dirtyRuntimeSets ?? /* @__PURE__ */ new Set(),
23526
25572
  __runtimeReferenceRemap: referenceRemap,
23527
25573
  __executionState: ctx.__executionState ?? {
25574
+ randomDraws: 0,
25575
+ random: ctx.random,
25576
+ randomIdentity: ctx.randomIdentity,
25577
+ randomSource: ctx.randomSource,
23528
25578
  exceptionHandlers: [],
23529
25579
  activeScopes: [],
23530
25580
  caughtErrors: [],
@@ -25903,6 +27953,9 @@ function keepAssignedCollectionValues(value, targetTypeInfo, ctx) {
25903
27953
  }
25904
27954
  }
25905
27955
  function replaceRowValue(row, value, receiver, ctx) {
27956
+ if (row.value !== value) {
27957
+ (ctx.__executionState?.random ?? ctx.random ?? ctx.vm.databaseVM?.random)?.forgetInstance(row.id);
27958
+ }
25906
27959
  const indexes4 = ctx.__indexes;
25907
27960
  if (indexes4 === void 0 || ctx.__runtimeSessionValues?.get(row.id) !== row || !indexes4.indexedRowIds.has(row.id)) {
25908
27961
  row.value = value;
@@ -28081,7 +30134,12 @@ function evalPointerCore(pointer, scope, ctx, resultUsage = "value") {
28081
30134
  if (member.kind === 13 /* Function */) {
28082
30135
  const systemResult = evaluateSystemNative(
28083
30136
  member.id,
28084
- { receiver: innerThis, args, typeArguments },
30137
+ {
30138
+ receiverKind: pointer.receiver.kind,
30139
+ receiver: innerThis,
30140
+ args,
30141
+ typeArguments
30142
+ },
28085
30143
  ctx
28086
30144
  );
28087
30145
  if (systemResult.handled) return systemResult.value;
@@ -28452,6 +30510,7 @@ function invokeDelegateValue(value, args, ctx, callSiteId, ownerReceiver, result
28452
30510
  const systemResult = evaluateSystemNative(
28453
30511
  member.id,
28454
30512
  {
30513
+ receiverKind: isStaticMember(member) ? "static" : "instance",
28455
30514
  receiver,
28456
30515
  args,
28457
30516
  typeArguments: calleeTypeArguments(void 0, member, ctx)
@@ -29965,27 +32024,31 @@ function readDeclarationDefault(member, ctx) {
29965
32024
  const created = [];
29966
32025
  const closeFrame = pushConstructionFrame(ctx, `${member.name} declaration`);
29967
32026
  try {
29968
- const root = buildDefaultMemberValue({
29969
- document: document2,
29970
- projectId: ctx.vm.project.id,
29971
- member,
29972
- createdValues: created,
29973
- initEvaluator: (child, init, sourceValueId, genericEnv = /* @__PURE__ */ new Map()) => withConstructionGenericSlots(
29974
- child,
29975
- ctx,
29976
- genericEnv,
29977
- () => evaluateInitializerInContext(
29978
- init,
32027
+ const root = withContentRandom(
32028
+ ctx,
32029
+ member.id,
32030
+ () => buildDefaultMemberValue({
32031
+ document: document2,
32032
+ projectId: ctx.vm.project.id,
32033
+ member,
32034
+ createdValues: created,
32035
+ initEvaluator: (child, init, sourceValueId, genericEnv = /* @__PURE__ */ new Map()) => withConstructionGenericSlots(
29979
32036
  child,
29980
32037
  ctx,
29981
- created,
29982
- [],
29983
- sourceValueId,
29984
- void 0,
29985
- genericEnv
32038
+ genericEnv,
32039
+ () => evaluateInitializerInContext(
32040
+ init,
32041
+ child,
32042
+ ctx,
32043
+ created,
32044
+ [],
32045
+ sourceValueId,
32046
+ void 0,
32047
+ genericEnv
32048
+ )
29986
32049
  )
29987
- )
29988
- });
32050
+ })
32051
+ );
29989
32052
  stageConstructedRows([root, ...created], ctx);
29990
32053
  if (known?.constant === true) known.root = root.id;
29991
32054
  return {
@@ -30819,6 +32882,72 @@ var getAreaNative = (call, ctx) => {
30819
32882
  }
30820
32883
  return null;
30821
32884
  };
32885
+ function randomNative(memberId) {
32886
+ return (call, ctx) => {
32887
+ if (memberId === NEO_RANDOM_IDS.ValidateSeed) {
32888
+ validateRandomSeed(randomNumberArg(call.args[0], "seed"));
32889
+ return null;
32890
+ }
32891
+ let row = null;
32892
+ if (call.receiverKind === "instance") {
32893
+ if (call.receiver === null || call.receiver === void 0)
32894
+ throw new NSGetterRuntimeError("NeoRandom instance receiver is null.", {
32895
+ errorClassId: NEO_ERROR_CLASS_IDS.NeoNullReferenceError
32896
+ });
32897
+ row = trackedRowForValueReference(call.receiver, ctx);
32898
+ if (row === null || classIdForValueRow(row, ctx) !== NEO_RANDOM_IDS.class)
32899
+ throw new NSGetterRuntimeError(
32900
+ "NeoRandom requires a NeoRandom instance receiver."
32901
+ );
32902
+ }
32903
+ const owner = randomForContext(ctx);
32904
+ let random = owner;
32905
+ if (row !== null) {
32906
+ if (typeof row.value !== "object" || row.value === null)
32907
+ throw new NSGetterRuntimeError(
32908
+ "NeoRandom instance has no object value."
32909
+ );
32910
+ const id = ctx.__runtimeSessionValues?.has(row.id) === true ? void 0 : row.id;
32911
+ const existing = owner.findInstance(row.value, id);
32912
+ if (existing !== void 0) random = existing;
32913
+ else {
32914
+ const seed = dispatchSchemaMember(row.value, "_constructorSeed", ctx);
32915
+ if (seed.kind !== "ok")
32916
+ throw new NSGetterRuntimeError(
32917
+ "NeoRandom constructor seed is missing."
32918
+ );
32919
+ random = owner.addInstance(
32920
+ row.value,
32921
+ id,
32922
+ randomNumberArg(seed.value, "seed")
32923
+ );
32924
+ }
32925
+ }
32926
+ if (memberId === NEO_RANDOM_IDS.GetSeed || memberId === NEO_RANDOM_IDS.SetSeed) {
32927
+ const key = row === null ? NEO_RANDOM_IDS.Seed : `${NEO_RANDOM_IDS.Seed}:${row.id}`;
32928
+ if (memberId === NEO_RANDOM_IDS.GetSeed) {
32929
+ if (!owner.isContentScope) {
32930
+ ctx.__getterReads?.add(key);
32931
+ ctx.valueDependencies?.add(key);
32932
+ }
32933
+ return random.seed;
32934
+ }
32935
+ random.seed = randomNumberArg(call.args[0], "seed");
32936
+ if (!owner.isContentScope) ctx.__getterSubscriptions?.noteValueWrite(key);
32937
+ if (random !== owner) owner.noteSeedWrite(key);
32938
+ return null;
32939
+ }
32940
+ const before = random.drawCount;
32941
+ try {
32942
+ if (memberId === NEO_RANDOM_IDS.Value) return random.value();
32943
+ const min = randomNumberArg(call.args[0], "Range min");
32944
+ const max = randomNumberArg(call.args[1], "Range max");
32945
+ return memberId === NEO_RANDOM_IDS.RangeInt ? random.rangeInt(min, max) : random.rangeFloat(min, max);
32946
+ } finally {
32947
+ ctx.__executionState.randomDraws += random.drawCount - before;
32948
+ }
32949
+ };
32950
+ }
30822
32951
  var SYSTEM_NATIVE_HANDLERS = new Map([
30823
32952
  [
30824
32953
  NEO_OBJECT_GRID_MEMBER_IDS.GetCell,
@@ -30889,6 +33018,9 @@ var SYSTEM_NATIVE_HANDLERS = new Map([
30889
33018
  ],
30890
33019
  [NEO_GET_AREA_MEMBER_IDS.NeoObjectBase, getAreaNative],
30891
33020
  [NEO_GET_AREA_MEMBER_IDS.NeoTile, getAreaNative],
33021
+ ...[...NEO_RANDOM_NATIVE_MEMBER_IDS].map(
33022
+ (id) => [id, randomNative(id)]
33023
+ ),
30892
33024
  ...[...NEO_CELL_PATTERN_PURE_NATIVE_MEMBER_IDS].map(
30893
33025
  (id) => [id, cellPatternNative(id)]
30894
33026
  )
@@ -31145,7 +33277,23 @@ var NS_MATH_OP_NAMES = {
31145
33277
  truncate: "Truncate",
31146
33278
  abs: "Abs",
31147
33279
  sign: "Sign",
31148
- sqrt: "Sqrt"
33280
+ sqrt: "Sqrt",
33281
+ pow: "Pow",
33282
+ exp: "Exp",
33283
+ log: "Log",
33284
+ log10: "Log10",
33285
+ sin: "Sin",
33286
+ cos: "Cos",
33287
+ tan: "Tan",
33288
+ asin: "Asin",
33289
+ acos: "Acos",
33290
+ atan: "Atan",
33291
+ atan2: "Atan2",
33292
+ lerp: "Lerp",
33293
+ inverselerp: "InverseLerp",
33294
+ movetowards: "MoveTowards",
33295
+ repeat: "Repeat",
33296
+ pingpong: "PingPong"
31149
33297
  };
31150
33298
  var DOUBLE_INTEGRAL_MAGNITUDE = 2 ** 53;
31151
33299
  function mathArgPointer(info, index, fn) {
@@ -31157,6 +33305,53 @@ function mathArgPointer(info, index, fn) {
31157
33305
  }
31158
33306
  return pointer;
31159
33307
  }
33308
+ function randomForContext(ctx) {
33309
+ const state = ctx.__executionState;
33310
+ if (state === void 0)
33311
+ throw new NSGetterRuntimeError(
33312
+ "NeoRandom requires an initialized evaluation runtime."
33313
+ );
33314
+ if (state.random !== void 0) return state.random;
33315
+ if (state.randomSource !== void 0)
33316
+ return state.random = state.randomSource();
33317
+ if (state.randomIdentity !== void 0)
33318
+ return state.random = new NeoRandom(state.randomIdentity);
33319
+ return state.random = ctx.random ?? ctx.vm.databaseVM?.random ?? new NeoRandom();
33320
+ }
33321
+ function withContentRandom(ctx, identity2, evaluate) {
33322
+ const state = ctx.__executionState;
33323
+ if (state === void 0)
33324
+ throw new NSGetterRuntimeError(
33325
+ "NeoRandom requires an initialized evaluation runtime."
33326
+ );
33327
+ const draws = state.randomDraws;
33328
+ try {
33329
+ if (state.random !== void 0)
33330
+ return state.random.withIdentity(identity2, evaluate);
33331
+ const previous = state.randomIdentity;
33332
+ const source = state.randomSource;
33333
+ return withContentRandomSource(state, identity2, (randomSource) => {
33334
+ state.randomSource = randomSource;
33335
+ state.randomIdentity = identity2;
33336
+ try {
33337
+ return evaluate();
33338
+ } finally {
33339
+ state.randomIdentity = previous;
33340
+ state.randomSource = source;
33341
+ state.random = void 0;
33342
+ }
33343
+ });
33344
+ } finally {
33345
+ state.randomDraws = draws;
33346
+ }
33347
+ }
33348
+ function randomNumberArg(value, label) {
33349
+ if (typeof value !== "number")
33350
+ throw new NSGetterRuntimeError(`NeoRandom.${label} must be numeric.`, {
33351
+ errorClassId: NEO_ERROR_CLASS_IDS.NeoArgumentError
33352
+ });
33353
+ return value;
33354
+ }
31160
33355
  function mathNumberArg(value, fn) {
31161
33356
  if (value === null || value === void 0) {
31162
33357
  throw new NSGetterRuntimeError(`Math.${fn} argument is null.`, {
@@ -31257,6 +33452,49 @@ function evalMathOp(info, scope, ctx) {
31257
33452
  if (value > 0) return 1;
31258
33453
  if (value < 0) return -1;
31259
33454
  return 0;
33455
+ case "exp":
33456
+ case "log":
33457
+ case "log10":
33458
+ case "sin":
33459
+ case "cos":
33460
+ case "tan":
33461
+ case "asin":
33462
+ case "acos":
33463
+ case "atan":
33464
+ return evaluateExtendedMath(info.op, Math.fround(value));
33465
+ case "pow":
33466
+ case "atan2":
33467
+ case "repeat":
33468
+ case "pingpong":
33469
+ return evaluateExtendedMath(
33470
+ info.op,
33471
+ Math.fround(value),
33472
+ Math.fround(
33473
+ mathNumberArg(
33474
+ evalPointer(mathArgPointer(info, 1, fn), scope, ctx),
33475
+ fn
33476
+ )
33477
+ )
33478
+ );
33479
+ case "lerp":
33480
+ case "inverselerp":
33481
+ case "movetowards":
33482
+ return evaluateExtendedMath(
33483
+ info.op,
33484
+ Math.fround(value),
33485
+ Math.fround(
33486
+ mathNumberArg(
33487
+ evalPointer(mathArgPointer(info, 1, fn), scope, ctx),
33488
+ fn
33489
+ )
33490
+ ),
33491
+ Math.fround(
33492
+ mathNumberArg(
33493
+ evalPointer(mathArgPointer(info, 2, fn), scope, ctx),
33494
+ fn
33495
+ )
33496
+ )
33497
+ );
31260
33498
  case "sqrt":
31261
33499
  return Math.fround(Math.sqrt(value));
31262
33500
  }
@@ -31268,6 +33506,25 @@ function evalDecimalMathOp(info, fn, scope, ctx) {
31268
33506
  );
31269
33507
  try {
31270
33508
  switch (info.op) {
33509
+ case "pow":
33510
+ case "exp":
33511
+ case "log":
33512
+ case "log10":
33513
+ case "sin":
33514
+ case "cos":
33515
+ case "tan":
33516
+ case "asin":
33517
+ case "acos":
33518
+ case "atan":
33519
+ case "atan2":
33520
+ case "lerp":
33521
+ case "inverselerp":
33522
+ case "movetowards":
33523
+ case "repeat":
33524
+ case "pingpong":
33525
+ throw new NSGetterRuntimeError(
33526
+ `Math.${fn} does not accept decimal arguments.`
33527
+ );
31271
33528
  case "min":
31272
33529
  return minDecimalStrings(
31273
33530
  value,
@@ -35389,6 +37646,8 @@ function constructDeclaredClassValueWithinFrame(descriptor, record4, info, scope
35389
37646
  const preparedArgumentScopes = prepareConstructorArgumentScopes(
35390
37647
  record4,
35391
37648
  argumentValues,
37649
+ // Base arguments run before a receiver exists, but still belong to the
37650
+ // constructed class's generic scope rather than the caller's.
35392
37651
  {
35393
37652
  ...bindThisValue(ctx, null),
35394
37653
  __initializerGenericEnv: descriptor.instanceEnv
@@ -37234,7 +39493,7 @@ var SourceText = class {
37234
39493
  return this.lineStarts.length;
37235
39494
  }
37236
39495
  positionAt(rawOffset) {
37237
- const offset = clamp(rawOffset, 0, this.text.length);
39496
+ const offset = clamp2(rawOffset, 0, this.text.length);
37238
39497
  const previousLine = this.#lastPositionLine;
37239
39498
  const previousStart = this.lineStarts[previousLine];
37240
39499
  const nextStart = this.lineStarts[previousLine + 1];
@@ -37256,11 +39515,11 @@ var SourceText = class {
37256
39515
  };
37257
39516
  }
37258
39517
  offsetAt(position) {
37259
- const line = clamp(position.line, 0, this.lineStarts.length - 1);
39518
+ const line = clamp2(position.line, 0, this.lineStarts.length - 1);
37260
39519
  const start = this.lineStarts[line] ?? 0;
37261
39520
  const next = this.lineStarts[line + 1] ?? this.text.length;
37262
39521
  const rawEnd = next > start && this.text.charCodeAt(next - 1) === 10 ? next - 1 : next;
37263
- return clamp(start + position.character, start, rawEnd);
39522
+ return clamp2(start + position.character, start, rawEnd);
37264
39523
  }
37265
39524
  range(start, end) {
37266
39525
  return {
@@ -37280,7 +39539,7 @@ var SourceText = class {
37280
39539
  return this.text.slice(start, withoutCarriageReturn);
37281
39540
  }
37282
39541
  };
37283
- function clamp(value, minimum, maximum) {
39542
+ function clamp2(value, minimum, maximum) {
37284
39543
  return Math.max(minimum, Math.min(maximum, value));
37285
39544
  }
37286
39545
 
@@ -39577,6 +41836,7 @@ function evaluateInitializerMaterialization(args) {
39577
41836
  const createdValues = [];
39578
41837
  const storageKeyDeclarations = /* @__PURE__ */ new Map();
39579
41838
  const evaluated = args.evaluateInitializer({
41839
+ randomSource: args.randomSource,
39580
41840
  genericEnv: args.genericEnv,
39581
41841
  init: args.init,
39582
41842
  member: args.member,
@@ -39656,6 +41916,7 @@ function finalizeMaterializedRoot(args) {
39656
41916
  }
39657
41917
  function materializeInitializerValue(args) {
39658
41918
  const { evaluated, createdValues, storageKeyDeclarations } = evaluateInitializerMaterialization({
41919
+ randomSource: args.randomSource,
39659
41920
  evaluateInitializer: args.evaluateInitializer,
39660
41921
  init: args.row.init,
39661
41922
  member: args.member,
@@ -39706,11 +41967,19 @@ function materializeInitializerValue(args) {
39706
41967
  return {
39707
41968
  root,
39708
41969
  createdValues,
41970
+ snapshot: evaluated.snapshot,
39709
41971
  pinnedRootSchemaKeys: evaluated.pinnedRootSchemaKeys ?? /* @__PURE__ */ new Set(),
39710
41972
  pinnedSchemaKeysByValueId: evaluated.pinnedSchemaKeysByValueId ?? /* @__PURE__ */ new Map()
39711
41973
  };
39712
41974
  }
39713
41975
  function materializeMemberDefaultValue(args) {
41976
+ if (args.randomSource === void 0)
41977
+ return withContentRandomSource(
41978
+ args.document,
41979
+ args.randomIdentity ?? args.envelope.id,
41980
+ (randomSource2) => materializeMemberDefaultValue({ ...args, randomSource: randomSource2 })
41981
+ );
41982
+ const randomSource = args.randomSource;
39714
41983
  const createdValues = [];
39715
41984
  const storageKeyDeclarations = /* @__PURE__ */ new Map();
39716
41985
  const declarationArguments = (member, init, sourceValueId) => {
@@ -39792,6 +42061,8 @@ function materializeMemberDefaultValue(args) {
39792
42061
  // A declaration default may itself be init-backed one level down (P43 §2),
39793
42062
  // and those nested initializers must evaluate against the same document.
39794
42063
  initEvaluator: (member, init, sourceValueId, genericEnv) => args.evaluateInitializer({
42064
+ randomSource,
42065
+ randomIdentity: args.randomIdentity ?? args.envelope.id,
39795
42066
  genericEnv,
39796
42067
  storageKeyDeclarations,
39797
42068
  init,
@@ -41202,6 +43473,12 @@ function materializationReadTracking(recorder) {
41202
43473
  return { readTracking, trackMaterialization };
41203
43474
  }
41204
43475
  function expandStoredInstance(args) {
43476
+ if (args.randomSource === void 0)
43477
+ return withContentRandomSource(
43478
+ args.document,
43479
+ args.instanceRoot.id,
43480
+ (randomSource2) => expandStoredInstance({ ...args, randomSource: randomSource2 })
43481
+ );
41205
43482
  const { readTracking, trackMaterialization } = materializationReadTracking(
41206
43483
  args.readRecorder
41207
43484
  );
@@ -41213,6 +43490,7 @@ function expandStoredInstance(args) {
41213
43490
  );
41214
43491
  }
41215
43492
  const instanceRoot = literalRow(args.instanceRoot);
43493
+ const randomSource = args.randomSource;
41216
43494
  const classId = rowClassId(rootMember, instanceRoot);
41217
43495
  const schemaIndex = projectSchemaIndexFor(args.document);
41218
43496
  const schemaClass2 = schemaIndex.class(classId);
@@ -41307,6 +43585,7 @@ function expandStoredInstance(args) {
41307
43585
  return trackMaterialization(
41308
43586
  () => args.materializeInitializerValue({
41309
43587
  evaluateInitializer: args.evaluateInitializer,
43588
+ randomSource,
41310
43589
  document: args.document,
41311
43590
  member: replayMember,
41312
43591
  row: { ...envelope, init },
@@ -41323,6 +43602,7 @@ function expandStoredInstance(args) {
41323
43602
  const built = trackMaterialization(
41324
43603
  () => args.materializeMemberDefaultValue({
41325
43604
  evaluateInitializer: args.evaluateInitializer,
43605
+ randomSource,
41326
43606
  document: args.document,
41327
43607
  member: replayMember,
41328
43608
  envelope,
@@ -41351,6 +43631,7 @@ function expandStoredInstance(args) {
41351
43631
  const materialized = typeof appliedVariantId !== "string" ? constructed : trackMaterialization(
41352
43632
  () => replayAppliedVariant({
41353
43633
  evaluateInitializer: args.evaluateInitializer,
43634
+ randomSource,
41354
43635
  document: args.document,
41355
43636
  member: replayMember,
41356
43637
  constructed,
@@ -41384,6 +43665,7 @@ function replayAppliedVariant(args) {
41384
43665
  classId: args.classId
41385
43666
  };
41386
43667
  args.evaluateInitializer({
43668
+ randomSource: args.randomSource,
41387
43669
  init: {
41388
43670
  code: `virtual-applied-variant:${rootId}`,
41389
43671
  compiled: {
@@ -45082,6 +47364,7 @@ function initializerEvaluatorLookups(document2, readTracking) {
45082
47364
  if (document2.databaseVM !== void 0) {
45083
47365
  const databaseVM = document2.databaseVM;
45084
47366
  const lookups2 = {
47367
+ random: databaseVM.random,
45085
47368
  ...databaseVM.changeListenerDefaultsForOwner === void 0 ? {} : {
45086
47369
  changeListenerDefaultsForOwner: (id) => databaseVM.changeListenerDefaultsForOwner(id)
45087
47370
  },
@@ -45333,12 +47616,25 @@ function compileMemberInitializer(args, databaseVM = initializerEvaluatorLookups
45333
47616
  });
45334
47617
  }
45335
47618
  function evaluateMemberInitializer(args) {
47619
+ const randomIdentity = args.randomIdentity ?? args.sourceValueId ?? Reflect.get(args.member, "id");
47620
+ if (typeof randomIdentity !== "string")
47621
+ throw new Error(
47622
+ "Stored initializer evaluation requires its content identity."
47623
+ );
47624
+ if (args.randomSource === void 0)
47625
+ return withContentRandomSource(
47626
+ args.document,
47627
+ randomIdentity,
47628
+ (randomSource) => evaluateMemberInitializer({ ...args, randomIdentity, randomSource })
47629
+ );
45336
47630
  const databaseVM = initializerEvaluatorLookups(
45337
47631
  args.document,
45338
47632
  args.readTracking
45339
47633
  );
45340
47634
  const compiled = compileMemberInitializer(args, databaseVM);
45341
47635
  const ctx = {
47636
+ randomSource: args.randomSource,
47637
+ randomIdentity,
45342
47638
  ...args.sessionValues === void 0 ? {} : { __runtimeSessionValues: args.sessionValues },
45343
47639
  debugSink: args.document.debugSink,
45344
47640
  beforeValueAllocation: args.document.beforeValueAllocation,
@@ -45458,6 +47754,7 @@ function evaluateMemberInitializer(args) {
45458
47754
  const provenance = pickInstanceProvenance({ ...rootRow, constructorArgs });
45459
47755
  return {
45460
47756
  value: result.value,
47757
+ snapshot: (evaluatedContext.__executionState?.randomDraws ?? 0) > 0,
45461
47758
  classId: rootRow.classId ?? null,
45462
47759
  ...rootRow.genericBindings === void 0 ? {} : { genericBindings: { ...rootRow.genericBindings } },
45463
47760
  ...pinnedRootSchemaKeys === void 0 ? {} : { pinnedRootSchemaKeys },
@@ -48176,7 +50473,23 @@ var MATH_FUNCTIONS = /* @__PURE__ */ new Map([
48176
50473
  ["Truncate", { op: "truncate", arity: 1, result: "integral" }],
48177
50474
  ["Abs", { op: "abs", arity: 1, result: "join" }],
48178
50475
  ["Sign", { op: "sign", arity: 1, result: "int" }],
48179
- ["Sqrt", { op: "sqrt", arity: 1, result: "float" }]
50476
+ ["Sqrt", { op: "sqrt", arity: 1, result: "float" }],
50477
+ ["Pow", { op: "pow", arity: 2, result: "float" }],
50478
+ ["Exp", { op: "exp", arity: 1, result: "float" }],
50479
+ ["Log", { op: "log", arity: 1, result: "float" }],
50480
+ ["Log10", { op: "log10", arity: 1, result: "float" }],
50481
+ ["Sin", { op: "sin", arity: 1, result: "float" }],
50482
+ ["Cos", { op: "cos", arity: 1, result: "float" }],
50483
+ ["Tan", { op: "tan", arity: 1, result: "float" }],
50484
+ ["Asin", { op: "asin", arity: 1, result: "float" }],
50485
+ ["Acos", { op: "acos", arity: 1, result: "float" }],
50486
+ ["Atan", { op: "atan", arity: 1, result: "float" }],
50487
+ ["Atan2", { op: "atan2", arity: 2, result: "float" }],
50488
+ ["Lerp", { op: "lerp", arity: 3, result: "float" }],
50489
+ ["InverseLerp", { op: "inverselerp", arity: 3, result: "float" }],
50490
+ ["MoveTowards", { op: "movetowards", arity: 3, result: "float" }],
50491
+ ["Repeat", { op: "repeat", arity: 2, result: "float" }],
50492
+ ["PingPong", { op: "pingpong", arity: 2, result: "float" }]
48180
50493
  ]);
48181
50494
  var MATH_CONSTANTS = /* @__PURE__ */ new Map([
48182
50495
  ["PI", 3.141592653589793],
@@ -49439,7 +51752,7 @@ var StrictNeoScriptResolver = class _StrictNeoScriptResolver {
49439
51752
  statement.iterator,
49440
51753
  iteratorScope
49441
51754
  );
49442
- if (iterator.type !== "assign" /* Assign */) {
51755
+ if (iterator.type !== "assign" /* Assign */ && iterator.type !== "functionCall" /* FunctionCall */) {
49443
51756
  throw new CompileError(
49444
51757
  "A for-loop iterator must be an assignment; an NSAction subscription is not a valid iterator.",
49445
51758
  statement.iterator.pos
@@ -50143,7 +52456,7 @@ var StrictNeoScriptResolver = class _StrictNeoScriptResolver {
50143
52456
  assertLocalNameAvailable(name, scope, pos) {
50144
52457
  if (name === MATH_NAMESPACE_NAME) {
50145
52458
  throw new CompileError(
50146
- `Cannot declare a local named '${MATH_NAMESPACE_NAME}' because it is a builtin namespace.`,
52459
+ `Cannot declare a local named '${name}' because it is a builtin namespace.`,
50147
52460
  pos
50148
52461
  );
50149
52462
  }
@@ -50358,6 +52671,31 @@ var StrictNeoScriptResolver = class _StrictNeoScriptResolver {
50358
52671
  statement.target,
50359
52672
  scope
50360
52673
  );
52674
+ if (placeTarget.symbol?.id === NEO_RANDOM_IDS.Seed && placeTarget.pointer.type === "callFunction" /* CallFunction */ && placeTarget.pointer.receiver.kind === "static") {
52675
+ const value2 = statement.op === "=" && statement.value ? this.resolveExpression(statement.value, scope, placeTarget.type) : this.resolveCompoundAssignment(
52676
+ statement.op,
52677
+ statement.value,
52678
+ placeTarget,
52679
+ scope,
52680
+ statement.pos
52681
+ );
52682
+ this.requireAssignable(
52683
+ value2.type,
52684
+ placeTarget.type,
52685
+ statement.pos,
52686
+ "assign"
52687
+ );
52688
+ return {
52689
+ type: "functionCall" /* FunctionCall */,
52690
+ call: {
52691
+ type: "callFunction" /* CallFunction */,
52692
+ memberId: NEO_RANDOM_IDS.SetSeed,
52693
+ receiver: { kind: "static", memberId: NEO_RANDOM_IDS.SetSeed },
52694
+ args: [value2.pointer],
52695
+ callSiteId: this.nextCallSite(statement.pos)
52696
+ }
52697
+ };
52698
+ }
50361
52699
  if (placeTarget.pointer.type === "function" /* Function */ && placeTarget.pointer.function.type === "tupleElement" /* TupleElement */) {
50362
52700
  throw new CompileError(
50363
52701
  "Tuple elements are immutable. Assign a new tuple to the whole value.",
@@ -50432,13 +52770,15 @@ var StrictNeoScriptResolver = class _StrictNeoScriptResolver {
50432
52770
  statement.pos
50433
52771
  );
50434
52772
  }
50435
- this.validateConstructorWriteTarget(
50436
- target.pointer,
50437
- "assign to",
50438
- statement.pos,
50439
- scope,
50440
- false
50441
- );
52773
+ if (target.symbol?.id !== NEO_RANDOM_IDS.Seed) {
52774
+ this.validateConstructorWriteTarget(
52775
+ target.pointer,
52776
+ "assign to",
52777
+ statement.pos,
52778
+ scope,
52779
+ false
52780
+ );
52781
+ }
50442
52782
  if (target.type.kind === "action") {
50443
52783
  return this.resolveActionSubscription(
50444
52784
  statement,
@@ -52873,7 +55213,7 @@ var StrictNeoScriptResolver = class _StrictNeoScriptResolver {
52873
55213
  }
52874
55214
  if (name === MATH_NAMESPACE_NAME) {
52875
55215
  throw new CompileError(
52876
- `'${MATH_NAMESPACE_NAME}' is a builtin namespace, not a value.`,
55216
+ `'${name}' is a builtin namespace, not a value.`,
52877
55217
  pos
52878
55218
  );
52879
55219
  }
@@ -53419,6 +55759,20 @@ var StrictNeoScriptResolver = class _StrictNeoScriptResolver {
53419
55759
  }
53420
55760
  resolveStaticMemberValue(staticType, member, pos) {
53421
55761
  this.assertMemberAccessible(staticType, member, pos);
55762
+ if (staticType.id === NEO_RANDOM_IDS.class && member.id === NEO_RANDOM_IDS.Seed) {
55763
+ return {
55764
+ pointer: {
55765
+ type: "callFunction" /* CallFunction */,
55766
+ memberId: NEO_RANDOM_IDS.GetSeed,
55767
+ receiver: { kind: "static", memberId: NEO_RANDOM_IDS.GetSeed },
55768
+ args: [],
55769
+ callSiteId: this.nextCallSite(pos)
55770
+ },
55771
+ type: member.type,
55772
+ symbol: member,
55773
+ writability: "setter" /* Setter */
55774
+ };
55775
+ }
53422
55776
  if (member.static !== true) {
53423
55777
  throw new CompileError(
53424
55778
  `Member '${staticType.name}.${member.name}' requires an instance receiver.`,
@@ -54567,7 +56921,7 @@ var StrictNeoScriptResolver = class _StrictNeoScriptResolver {
54567
56921
  argPointers: joined.arguments.map((argument2) => argument2.pointer),
54568
56922
  ...isPrimitive(joined.type, "decimal") ? { decimal: true } : {}
54569
56923
  },
54570
- mathResultType(fn.result, joined.type, pos)
56924
+ mathResultType(fn.result, joined.type, pos, name)
54571
56925
  );
54572
56926
  }
54573
56927
  /**
@@ -54905,7 +57259,7 @@ var StrictNeoScriptResolver = class _StrictNeoScriptResolver {
54905
57259
  const candidates2 = this.overloadCandidates(
54906
57260
  staticType,
54907
57261
  callee.name,
54908
- "static"
57262
+ staticType.id === NEO_RANDOM_IDS.class ? "instance" : "static"
54909
57263
  );
54910
57264
  const member2 = candidates2[0] ?? staticType.members.find(
54911
57265
  (candidate) => candidate.name === callee.name
@@ -54917,7 +57271,7 @@ var StrictNeoScriptResolver = class _StrictNeoScriptResolver {
54917
57271
  );
54918
57272
  }
54919
57273
  this.assertMemberAccessible(staticType, member2, pos);
54920
- if (member2.static !== true) {
57274
+ if (member2.static !== true && !isNeoRandomSharedMethod(staticType.id, member2.id)) {
54921
57275
  throw new CompileError(
54922
57276
  `Member '${staticType.name}.${callee.name}' requires an instance receiver.`,
54923
57277
  pos
@@ -55613,7 +57967,9 @@ var StrictNeoScriptResolver = class _StrictNeoScriptResolver {
55613
57967
  };
55614
57968
  }
55615
57969
  resolveConstructorOverload(className, declared, named, expression, scope, pos) {
55616
- if (named.length === 0) {
57970
+ if (named.length === 0 && neoScriptRequiredConstructor(
57971
+ this.project.typeByName.get(className) ?? { declaredConstructors: [] }
57972
+ ) === null) {
55617
57973
  return neoScriptParameterlessConstructor(
55618
57974
  this.project.typeByName.get(className) ?? { declaredConstructors: [] }
55619
57975
  );
@@ -58421,14 +60777,14 @@ var StrictNeoScriptResolver = class _StrictNeoScriptResolver {
58421
60777
  const candidates2 = this.overloadCandidates(
58422
60778
  staticType,
58423
60779
  memberName,
58424
- "static"
60780
+ staticType.id === NEO_RANDOM_IDS.class ? "instance" : "static"
58425
60781
  );
58426
60782
  const found2 = candidates2[0] ?? staticType.members.find(
58427
60783
  (candidate) => (candidate.kind === "function" || candidate.kind === "method") && candidate.name === memberName
58428
60784
  );
58429
60785
  if (!found2) return null;
58430
60786
  this.assertMemberAccessible(staticType, found2, expression.pos);
58431
- if (found2.static !== true) {
60787
+ if (found2.static !== true && !isNeoRandomSharedMethod(staticType.id, found2.id)) {
58432
60788
  throw new CompileError(
58433
60789
  `Member '${staticType.name}.${memberName}' requires an instance receiver.`,
58434
60790
  expression.pos
@@ -59599,7 +61955,7 @@ var StrictNeoScriptResolver = class _StrictNeoScriptResolver {
59599
61955
  return this.expressionWriteRoot(initial, scope);
59600
61956
  }
59601
61957
  validateCallableInContext(symbol, pos) {
59602
- if (symbol.native === true && !NEO_CELL_PATTERN_PURE_NATIVE_MEMBER_IDS.has(symbol.id) && isNeoScriptConstructionDocumentKind(this.context.kind)) {
61958
+ if (symbol.native === true && !NEO_CELL_PATTERN_PURE_NATIVE_MEMBER_IDS.has(symbol.id) && !NEO_RANDOM_NATIVE_MEMBER_IDS.has(symbol.id) && isNeoScriptConstructionDocumentKind(this.context.kind)) {
59603
61959
  throw new CompileError(
59604
61960
  `Native Function '${symbol.name}' is implemented by the game, so a ${this.context.kind} body cannot call it; neither push nor the web can evaluate it.`,
59605
61961
  pos
@@ -61386,7 +63742,7 @@ function isContextualNumericLiteral(expression) {
61386
63742
  }
61387
63743
  return expression.kind === "unary" && expression.op === "-" && (expression.operand.kind === "litInt" || expression.operand.kind === "litFloat");
61388
63744
  }
61389
- function mathResultType(rule, joined, pos) {
63745
+ function mathResultType(rule, joined, pos, name) {
61390
63746
  switch (rule) {
61391
63747
  case "join":
61392
63748
  return joined;
@@ -61397,7 +63753,7 @@ function mathResultType(rule, joined, pos) {
61397
63753
  case "float":
61398
63754
  if (isPrimitive(joined, "decimal")) {
61399
63755
  throw new CompileError(
61400
- "Math.Sqrt does not accept decimal; convert explicitly with value.ToFloat().",
63756
+ `Math.${name} does not accept decimal; convert explicitly with value.ToFloat().`,
61401
63757
  pos
61402
63758
  );
61403
63759
  }
@@ -64738,8 +67094,8 @@ function compareCodePoints(left, right) {
64738
67094
  return left < right ? -1 : left > right ? 1 : 0;
64739
67095
  }
64740
67096
  function pascalIdentifier(value) {
64741
- const words = value.normalize("NFKD").replace(/[^A-Za-z0-9]+/g, " ").trim().split(/\s+/).filter(Boolean);
64742
- let identifier = words.map((word) => `${word[0].toUpperCase()}${word.slice(1)}`).join("");
67097
+ const words2 = value.normalize("NFKD").replace(/[^A-Za-z0-9]+/g, " ").trim().split(/\s+/).filter(Boolean);
67098
+ let identifier = words2.map((word) => `${word[0].toUpperCase()}${word.slice(1)}`).join("");
64743
67099
  if (identifier.length === 0) identifier = "File";
64744
67100
  if (/^[0-9]/.test(identifier)) identifier = `File${identifier}`;
64745
67101
  return identifier;
@@ -73247,7 +75603,7 @@ function collectAssignedOwnershipVariableIds(instructions, assigned = /* @__PURE
73247
75603
  continue;
73248
75604
  }
73249
75605
  if (instruction.type === "for" /* for */) {
73250
- if (instruction.iterator.target.pointer.type === "variable" /* variable */) {
75606
+ if (instruction.iterator.type === "assign" /* assign */ && instruction.iterator.target.pointer.type === "variable" /* variable */) {
73251
75607
  assigned.add(instruction.iterator.target.pointer.variableId);
73252
75608
  }
73253
75609
  collectAssignedOwnershipVariableIds(instruction.instructions, assigned);
@@ -79696,38 +82052,6 @@ import { ConvexError as ConvexError4 } from "convex/values";
79696
82052
  // ../src/common/client-commit-transport.ts
79697
82053
  var INLINE_COMMIT_MAX_PAYLOAD_BYTES = 512 * 1024;
79698
82054
 
79699
- // src/ui.ts
79700
- var colorEnabled = process.stdout.isTTY === true && process.env.NO_COLOR === void 0 && process.env.TERM !== "dumb";
79701
- function paint(open, close) {
79702
- if (!colorEnabled) return (text) => text;
79703
- return (text) => `\x1B[${open}m${text}\x1B[${close}m`;
79704
- }
79705
- var color = {
79706
- bold: paint(1, 22),
79707
- dim: paint(2, 22),
79708
- red: paint(31, 39),
79709
- green: paint(32, 39),
79710
- yellow: paint(33, 39),
79711
- blue: paint(34, 39),
79712
- magenta: paint(35, 39),
79713
- cyan: paint(36, 39)
79714
- };
79715
- var sym = {
79716
- ok: color.green("\u2714"),
79717
- fail: color.red("\u2716"),
79718
- warn: color.yellow("\u25B2"),
79719
- info: color.cyan("\u25CF"),
79720
- arrow: color.dim("\u2192"),
79721
- branch: color.magenta("\u2387"),
79722
- tag: color.cyan("\u2301"),
79723
- pointer: color.cyan("\u276F")
79724
- };
79725
- var CHANGE_KIND_COLOR = {
79726
- create: color.green,
79727
- update: color.yellow,
79728
- delete: color.red
79729
- };
79730
-
79731
82055
  // src/project-source/project-file-push.ts
79732
82056
  var UPLOAD_CONCURRENCY = 6;
79733
82057
  var PRESIGN_BATCH_SIZE = Math.min(
@@ -79892,10 +82216,6 @@ var SCRIPT_COLLECTION_READERS = {
79892
82216
  [5 /* Dictionary */]: "ReadScriptDictionary"
79893
82217
  };
79894
82218
 
79895
- // src/export-state.ts
79896
- import { join } from "node:path";
79897
- var EXPORT_STATE_FILE = join(".neo", "export.json");
79898
-
79899
82219
  // src/export-cache.ts
79900
82220
  var MAX_CACHE_BYTES = 256 * 1024 * 1024;
79901
82221
 
@@ -80185,10 +82505,11 @@ function sharedEvaluatorBase(rawDocument) {
80185
82505
  SHARED_EVALUATOR_BASES.set(rawDocument, created);
80186
82506
  return created;
80187
82507
  }
80188
- function makeEvaluatorContext(rawDocument, interceptor) {
82508
+ function makeEvaluatorContext(rawDocument, interceptor, seed) {
80189
82509
  const base = sharedEvaluatorBase(rawDocument);
80190
82510
  return createNeoScriptEvaluationRuntime({
80191
82511
  vm: base.vm,
82512
+ random: new NeoRandom(seed),
80192
82513
  debugSink: stderrNeoScriptDebugSink,
80193
82514
  thisValue: null,
80194
82515
  rootValue: base.rootValue,
@@ -80327,7 +82648,7 @@ function validateRegistrationAction(action, allowRegistration) {
80327
82648
  }
80328
82649
  }
80329
82650
  }
80330
- function registerSpec(spec, document2) {
82651
+ function registerSpec(spec, document2, seed) {
80331
82652
  document2 = withCompiledConstructionTypes(document2, spec.action);
80332
82653
  validateRegistrationAction(spec.action, true);
80333
82654
  const root = {
@@ -80406,10 +82727,10 @@ function registerSpec(spec, document2) {
80406
82727
  };
80407
82728
  evaluateNSFunction(
80408
82729
  spec.action,
80409
- makeEvaluatorContext(document2, interceptor),
82730
+ makeEvaluatorContext(document2, interceptor, seed),
80410
82731
  []
80411
82732
  );
80412
- return { spec, root, tests, document: document2 };
82733
+ return { spec, root, tests, document: document2, seed };
80413
82734
  }
80414
82735
  function mockResponse(environment, mock, selected, call) {
80415
82736
  if (selected === null) {
@@ -80725,8 +83046,9 @@ function interceptTestCall(environment, call) {
80725
83046
  throw error;
80726
83047
  }
80727
83048
  }
80728
- function createTestEnvironment(document2) {
83049
+ function createTestEnvironment(document2, seed) {
80729
83050
  const environment = {
83051
+ seed,
80730
83052
  baseDocument: document2,
80731
83053
  context: void 0,
80732
83054
  mocks: /* @__PURE__ */ new Map(),
@@ -80736,7 +83058,8 @@ function createTestEnvironment(document2) {
80736
83058
  };
80737
83059
  environment.context = makeEvaluatorContext(
80738
83060
  document2,
80739
- (call) => interceptTestCall(environment, call)
83061
+ (call) => interceptTestCall(environment, call),
83062
+ seed
80740
83063
  );
80741
83064
  return environment;
80742
83065
  }
@@ -80798,7 +83121,10 @@ function copyMocks(source, target) {
80798
83121
  }
80799
83122
  }
80800
83123
  function cloneTestEnvironment(source) {
80801
- const cloned = createTestEnvironment(snapshotEnvironmentDocument(source));
83124
+ const cloned = createTestEnvironment(
83125
+ snapshotEnvironmentDocument(source),
83126
+ source.seed
83127
+ );
80802
83128
  copyMocks(source, cloned);
80803
83129
  cloned.context.__getterSubscriptions = source.context.__getterSubscriptions?.clone();
80804
83130
  return cloned;
@@ -80859,9 +83185,9 @@ function suiteHasSelectedTests(suite, selected) {
80859
83185
  function prepareTestEvaluator(document2) {
80860
83186
  sharedEvaluatorBase(document2);
80861
83187
  }
80862
- async function executeTestFile(spec, document2, selected, timeoutMs, interrupted2 = () => false) {
83188
+ async function executeTestFile(spec, document2, selected, timeoutMs, interrupted2 = () => false, seed = 0) {
80863
83189
  return executeRegisteredSpec(
80864
- registerSpec(spec, document2),
83190
+ registerSpec(spec, document2, seed),
80865
83191
  selected,
80866
83192
  timeoutMs,
80867
83193
  interrupted2
@@ -80976,7 +83302,11 @@ async function executeRegisteredSpec(registered, selected, timeoutMs, interrupte
80976
83302
  }
80977
83303
  }
80978
83304
  };
80979
- await executeSuite(registered.root, createTestEnvironment(document2), []);
83305
+ await executeSuite(
83306
+ registered.root,
83307
+ createTestEnvironment(document2, registered.seed),
83308
+ []
83309
+ );
80980
83310
  const registrationOrder = new Map(
80981
83311
  registered.tests.map((test, index) => [test.id, index])
80982
83312
  );
@@ -81011,7 +83341,8 @@ parentPort?.on("message", async (request) => {
81011
83341
  document,
81012
83342
  new Set(request.selectedIds),
81013
83343
  request.timeoutMs,
81014
- () => interrupted
83344
+ () => interrupted,
83345
+ request.seed
81015
83346
  );
81016
83347
  respond({ kind: "result", result });
81017
83348
  } catch (error) {