@rezless/vm 0.6.2 → 0.8.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 (273) hide show
  1. package/dist/builtins/agents.d.ts +14 -0
  2. package/dist/builtins/agents.d.ts.map +1 -0
  3. package/dist/builtins/agents.js +117 -0
  4. package/dist/builtins/agents.js.map +1 -0
  5. package/dist/builtins/animation.d.ts +46 -0
  6. package/dist/builtins/animation.d.ts.map +1 -0
  7. package/dist/builtins/animation.js +316 -0
  8. package/dist/builtins/animation.js.map +1 -0
  9. package/dist/builtins/attachments.d.ts +9 -0
  10. package/dist/builtins/attachments.d.ts.map +1 -0
  11. package/dist/builtins/attachments.js +127 -0
  12. package/dist/builtins/attachments.js.map +1 -0
  13. package/dist/builtins/base64.d.ts +13 -2
  14. package/dist/builtins/base64.d.ts.map +1 -1
  15. package/dist/builtins/base64.js +8 -6
  16. package/dist/builtins/base64.js.map +1 -1
  17. package/dist/builtins/camera.d.ts +35 -0
  18. package/dist/builtins/camera.d.ts.map +1 -0
  19. package/dist/builtins/camera.js +104 -0
  20. package/dist/builtins/camera.js.map +1 -0
  21. package/dist/builtins/collision.d.ts +21 -0
  22. package/dist/builtins/collision.d.ts.map +1 -0
  23. package/dist/builtins/collision.js +44 -0
  24. package/dist/builtins/collision.js.map +1 -0
  25. package/dist/builtins/controls.d.ts +19 -0
  26. package/dist/builtins/controls.d.ts.map +1 -0
  27. package/dist/builtins/controls.js +27 -0
  28. package/dist/builtins/controls.js.map +1 -0
  29. package/dist/builtins/damage.d.ts +24 -0
  30. package/dist/builtins/damage.d.ts.map +1 -0
  31. package/dist/builtins/damage.js +166 -0
  32. package/dist/builtins/damage.js.map +1 -0
  33. package/dist/builtins/detected.d.ts +22 -1
  34. package/dist/builtins/detected.d.ts.map +1 -1
  35. package/dist/builtins/detected.js +28 -2
  36. package/dist/builtins/detected.js.map +1 -1
  37. package/dist/builtins/dialog.d.ts +23 -0
  38. package/dist/builtins/dialog.d.ts.map +1 -0
  39. package/dist/builtins/dialog.js +69 -0
  40. package/dist/builtins/dialog.js.map +1 -0
  41. package/dist/builtins/email.d.ts +61 -0
  42. package/dist/builtins/email.d.ts.map +1 -0
  43. package/dist/builtins/email.js +121 -0
  44. package/dist/builtins/email.js.map +1 -0
  45. package/dist/builtins/environment.d.ts +27 -0
  46. package/dist/builtins/environment.d.ts.map +1 -0
  47. package/dist/builtins/environment.js +126 -0
  48. package/dist/builtins/environment.js.map +1 -0
  49. package/dist/builtins/experience.d.ts +51 -0
  50. package/dist/builtins/experience.d.ts.map +1 -0
  51. package/dist/builtins/experience.js +202 -0
  52. package/dist/builtins/experience.js.map +1 -0
  53. package/dist/builtins/game-control.d.ts +17 -0
  54. package/dist/builtins/game-control.d.ts.map +1 -0
  55. package/dist/builtins/game-control.js +21 -0
  56. package/dist/builtins/game-control.js.map +1 -0
  57. package/dist/builtins/give.d.ts +16 -0
  58. package/dist/builtins/give.d.ts.map +1 -0
  59. package/dist/builtins/give.js +137 -0
  60. package/dist/builtins/give.js.map +1 -0
  61. package/dist/builtins/ground.d.ts +18 -0
  62. package/dist/builtins/ground.d.ts.map +1 -0
  63. package/dist/builtins/ground.js +83 -0
  64. package/dist/builtins/ground.js.map +1 -0
  65. package/dist/builtins/hash.d.ts +1 -0
  66. package/dist/builtins/hash.d.ts.map +1 -1
  67. package/dist/builtins/hash.js +12 -2
  68. package/dist/builtins/hash.js.map +1 -1
  69. package/dist/builtins/http.d.ts +99 -4
  70. package/dist/builtins/http.d.ts.map +1 -1
  71. package/dist/builtins/http.js +216 -6
  72. package/dist/builtins/http.js.map +1 -1
  73. package/dist/builtins/index.d.ts.map +1 -1
  74. package/dist/builtins/index.js +250 -14
  75. package/dist/builtins/index.js.map +1 -1
  76. package/dist/builtins/inventory.d.ts +8 -5
  77. package/dist/builtins/inventory.d.ts.map +1 -1
  78. package/dist/builtins/inventory.js +37 -15
  79. package/dist/builtins/inventory.js.map +1 -1
  80. package/dist/builtins/json.d.ts.map +1 -1
  81. package/dist/builtins/json.js +45 -34
  82. package/dist/builtins/json.js.map +1 -1
  83. package/dist/builtins/land.d.ts +29 -0
  84. package/dist/builtins/land.d.ts.map +1 -0
  85. package/dist/builtins/land.js +339 -0
  86. package/dist/builtins/land.js.map +1 -0
  87. package/dist/builtins/link-info.js +2 -2
  88. package/dist/builtins/link-info.js.map +1 -1
  89. package/dist/builtins/links.d.ts +20 -0
  90. package/dist/builtins/links.d.ts.map +1 -0
  91. package/dist/builtins/links.js +53 -0
  92. package/dist/builtins/links.js.map +1 -0
  93. package/dist/builtins/linksetdata.d.ts +5 -0
  94. package/dist/builtins/linksetdata.d.ts.map +1 -1
  95. package/dist/builtins/linksetdata.js +22 -9
  96. package/dist/builtins/linksetdata.js.map +1 -1
  97. package/dist/builtins/lists.d.ts +21 -0
  98. package/dist/builtins/lists.d.ts.map +1 -1
  99. package/dist/builtins/lists.js +137 -17
  100. package/dist/builtins/lists.js.map +1 -1
  101. package/dist/builtins/math.d.ts +18 -0
  102. package/dist/builtins/math.d.ts.map +1 -1
  103. package/dist/builtins/math.js +104 -5
  104. package/dist/builtins/math.js.map +1 -1
  105. package/dist/builtins/media.d.ts +8 -0
  106. package/dist/builtins/media.d.ts.map +1 -0
  107. package/dist/builtins/media.js +167 -0
  108. package/dist/builtins/media.js.map +1 -0
  109. package/dist/builtins/motion.d.ts +79 -0
  110. package/dist/builtins/motion.d.ts.map +1 -0
  111. package/dist/builtins/motion.js +396 -0
  112. package/dist/builtins/motion.js.map +1 -0
  113. package/dist/builtins/notecard-search.d.ts +15 -0
  114. package/dist/builtins/notecard-search.d.ts.map +1 -0
  115. package/dist/builtins/notecard-search.js +374 -0
  116. package/dist/builtins/notecard-search.js.map +1 -0
  117. package/dist/builtins/object-animation.d.ts +21 -0
  118. package/dist/builtins/object-animation.d.ts.map +1 -0
  119. package/dist/builtins/object-animation.js +193 -0
  120. package/dist/builtins/object-animation.js.map +1 -0
  121. package/dist/builtins/object-reads.d.ts +39 -0
  122. package/dist/builtins/object-reads.d.ts.map +1 -0
  123. package/dist/builtins/object-reads.js +332 -0
  124. package/dist/builtins/object-reads.js.map +1 -0
  125. package/dist/builtins/object.d.ts +11 -2
  126. package/dist/builtins/object.d.ts.map +1 -1
  127. package/dist/builtins/object.js +32 -8
  128. package/dist/builtins/object.js.map +1 -1
  129. package/dist/builtins/particles.d.ts +4 -0
  130. package/dist/builtins/particles.d.ts.map +1 -0
  131. package/dist/builtins/particles.js +65 -0
  132. package/dist/builtins/particles.js.map +1 -0
  133. package/dist/builtins/pathfinding.d.ts +39 -0
  134. package/dist/builtins/pathfinding.d.ts.map +1 -0
  135. package/dist/builtins/pathfinding.js +83 -0
  136. package/dist/builtins/pathfinding.js.map +1 -0
  137. package/dist/builtins/permissions.d.ts.map +1 -1
  138. package/dist/builtins/permissions.js +6 -0
  139. package/dist/builtins/permissions.js.map +1 -1
  140. package/dist/builtins/physics.d.ts +49 -0
  141. package/dist/builtins/physics.d.ts.map +1 -0
  142. package/dist/builtins/physics.js +47 -0
  143. package/dist/builtins/physics.js.map +1 -0
  144. package/dist/builtins/prim-accessors.d.ts +4 -0
  145. package/dist/builtins/prim-accessors.d.ts.map +1 -1
  146. package/dist/builtins/prim-accessors.js +75 -28
  147. package/dist/builtins/prim-accessors.js.map +1 -1
  148. package/dist/builtins/prim-params.d.ts.map +1 -1
  149. package/dist/builtins/prim-params.js +6 -2
  150. package/dist/builtins/prim-params.js.map +1 -1
  151. package/dist/builtins/raycast.d.ts +3 -0
  152. package/dist/builtins/raycast.d.ts.map +1 -0
  153. package/dist/builtins/raycast.js +65 -0
  154. package/dist/builtins/raycast.js.map +1 -0
  155. package/dist/builtins/region.d.ts +31 -0
  156. package/dist/builtins/region.d.ts.map +1 -0
  157. package/dist/builtins/region.js +125 -0
  158. package/dist/builtins/region.js.map +1 -0
  159. package/dist/builtins/remote-load.d.ts +3 -0
  160. package/dist/builtins/remote-load.d.ts.map +1 -0
  161. package/dist/builtins/remote-load.js +53 -0
  162. package/dist/builtins/remote-load.js.map +1 -0
  163. package/dist/builtins/rez.d.ts +10 -0
  164. package/dist/builtins/rez.d.ts.map +1 -0
  165. package/dist/builtins/rez.js +255 -0
  166. package/dist/builtins/rez.js.map +1 -0
  167. package/dist/builtins/rsa.d.ts +4 -0
  168. package/dist/builtins/rsa.d.ts.map +1 -0
  169. package/dist/builtins/rsa.js +44 -0
  170. package/dist/builtins/rsa.js.map +1 -0
  171. package/dist/builtins/script-control.d.ts +8 -3
  172. package/dist/builtins/script-control.d.ts.map +1 -1
  173. package/dist/builtins/script-control.js +27 -8
  174. package/dist/builtins/script-control.js.map +1 -1
  175. package/dist/builtins/sensor.d.ts +11 -0
  176. package/dist/builtins/sensor.d.ts.map +1 -0
  177. package/dist/builtins/sensor.js +145 -0
  178. package/dist/builtins/sensor.js.map +1 -0
  179. package/dist/builtins/sit.d.ts +23 -0
  180. package/dist/builtins/sit.d.ts.map +1 -0
  181. package/dist/builtins/sit.js +150 -0
  182. package/dist/builtins/sit.js.map +1 -0
  183. package/dist/builtins/sound.d.ts +19 -0
  184. package/dist/builtins/sound.d.ts.map +1 -0
  185. package/dist/builtins/sound.js +113 -0
  186. package/dist/builtins/sound.js.map +1 -0
  187. package/dist/builtins/strings.d.ts +6 -0
  188. package/dist/builtins/strings.d.ts.map +1 -1
  189. package/dist/builtins/strings.js +47 -6
  190. package/dist/builtins/strings.js.map +1 -1
  191. package/dist/builtins/targets.d.ts +12 -0
  192. package/dist/builtins/targets.d.ts.map +1 -0
  193. package/dist/builtins/targets.js +121 -0
  194. package/dist/builtins/targets.js.map +1 -0
  195. package/dist/builtins/time.d.ts +15 -5
  196. package/dist/builtins/time.d.ts.map +1 -1
  197. package/dist/builtins/time.js +36 -11
  198. package/dist/builtins/time.js.map +1 -1
  199. package/dist/builtins/vehicles.d.ts +22 -0
  200. package/dist/builtins/vehicles.d.ts.map +1 -0
  201. package/dist/builtins/vehicles.js +78 -0
  202. package/dist/builtins/vehicles.js.map +1 -0
  203. package/dist/builtins/viewer.d.ts +39 -0
  204. package/dist/builtins/viewer.d.ts.map +1 -0
  205. package/dist/builtins/viewer.js +74 -0
  206. package/dist/builtins/viewer.js.map +1 -0
  207. package/dist/clock.d.ts +45 -7
  208. package/dist/clock.d.ts.map +1 -1
  209. package/dist/clock.js +125 -14
  210. package/dist/clock.js.map +1 -1
  211. package/dist/dispatch.d.ts +3 -2
  212. package/dist/dispatch.d.ts.map +1 -1
  213. package/dist/dispatch.js +15 -10
  214. package/dist/dispatch.js.map +1 -1
  215. package/dist/experience.d.ts +39 -0
  216. package/dist/experience.d.ts.map +1 -0
  217. package/dist/experience.js +38 -0
  218. package/dist/experience.js.map +1 -0
  219. package/dist/index.d.ts +20 -3
  220. package/dist/index.d.ts.map +1 -1
  221. package/dist/index.js +1 -0
  222. package/dist/index.js.map +1 -1
  223. package/dist/interpreter.d.ts +5 -10
  224. package/dist/interpreter.d.ts.map +1 -1
  225. package/dist/interpreter.js +143 -70
  226. package/dist/interpreter.js.map +1 -1
  227. package/dist/inventory.d.ts +2 -0
  228. package/dist/inventory.d.ts.map +1 -1
  229. package/dist/inventory.js +2 -0
  230. package/dist/inventory.js.map +1 -1
  231. package/dist/linkset.d.ts +147 -11
  232. package/dist/linkset.d.ts.map +1 -1
  233. package/dist/linkset.js +401 -28
  234. package/dist/linkset.js.map +1 -1
  235. package/dist/memory.d.ts +5 -2
  236. package/dist/memory.d.ts.map +1 -1
  237. package/dist/memory.js +5 -2
  238. package/dist/memory.js.map +1 -1
  239. package/dist/prim-params.d.ts +27 -10
  240. package/dist/prim-params.d.ts.map +1 -1
  241. package/dist/prim-params.js +209 -125
  242. package/dist/prim-params.js.map +1 -1
  243. package/dist/prim.d.ts +95 -5
  244. package/dist/prim.d.ts.map +1 -1
  245. package/dist/prim.js +96 -7
  246. package/dist/prim.js.map +1 -1
  247. package/dist/runtime.d.ts +52 -3
  248. package/dist/runtime.d.ts.map +1 -1
  249. package/dist/script.d.ts +171 -12
  250. package/dist/script.d.ts.map +1 -1
  251. package/dist/script.js +480 -73
  252. package/dist/script.js.map +1 -1
  253. package/dist/typecheck.d.ts +3 -1
  254. package/dist/typecheck.d.ts.map +1 -1
  255. package/dist/typecheck.js +25 -5
  256. package/dist/typecheck.js.map +1 -1
  257. package/dist/values/coerce.d.ts +1 -1
  258. package/dist/values/coerce.d.ts.map +1 -1
  259. package/dist/values/coerce.js +10 -6
  260. package/dist/values/coerce.js.map +1 -1
  261. package/dist/values/format.d.ts +3 -1
  262. package/dist/values/format.d.ts.map +1 -1
  263. package/dist/values/format.js +10 -6
  264. package/dist/values/format.js.map +1 -1
  265. package/dist/values/ops.d.ts +3 -0
  266. package/dist/values/ops.d.ts.map +1 -1
  267. package/dist/values/ops.js +2 -2
  268. package/dist/values/ops.js.map +1 -1
  269. package/dist/world.d.ts +247 -1
  270. package/dist/world.d.ts.map +1 -1
  271. package/dist/world.js +318 -6
  272. package/dist/world.js.map +1 -1
  273. package/package.json +2 -2
package/dist/linkset.js CHANGED
@@ -1,9 +1,15 @@
1
+ import { pauseSensors, resumeSensors } from './builtins/sensor.js';
2
+ import { pauseTargets, resumeTargets } from './builtins/targets.js';
3
+ import { flushDamageEvents } from './builtins/damage.js';
1
4
  import { LinksetClock } from './clock.js';
2
5
  import { Prim } from './prim.js';
6
+ import { mergeLinksetData } from './builtins/linksetdata.js';
3
7
  import { NULL_KEY } from './values/types.js';
4
- import { LINK_ROOT, LINK_SET, LINK_ALL_OTHERS, LINK_ALL_CHILDREN, LINK_THIS, } from './generated/constants.js';
8
+ import { conjugate, mulRotation, rotateVector } from './values/ops.js';
9
+ import { LINK_ROOT, LINK_SET, LINK_ALL_OTHERS, LINK_ALL_CHILDREN, LINK_THIS, PASS_ALWAYS, PASS_NEVER, CHANGED_LINK, KFM_CMD_STOP, REGION_FLAG_ALLOW_DAMAGE, } from './generated/constants.js';
5
10
  // Re-export so `import { LINK_* } from '@rezless/vm'` keeps working.
6
11
  export { LINK_ROOT, LINK_SET, LINK_ALL_OTHERS, LINK_ALL_CHILDREN, LINK_THIS };
12
+ const TOUCH_EVENTS = ['touch_start', 'touch', 'touch_end'];
7
13
  const CHAT_RANGE = { whisper: 10, say: 20, shout: 100 };
8
14
  /**
9
15
  * A linkset owns the shared world state for its prims and scripts: the
@@ -32,29 +38,163 @@ export class Linkset {
32
38
  clearLinkedMessages() {
33
39
  this.linkedMessages.length = 0;
34
40
  }
41
+ /** Whether this object is on damage-enabled land. Defaults to the region damage flag. */
42
+ damageEnabled = false;
43
+ /** Parcel-owner/group sources bypass the llDamage throttle. */
44
+ damageThrottleExempt = false;
35
45
  owner;
46
+ /** Null while rezzed or detached; tests may attach fixtures with attachToAvatar. */
47
+ attachment = null;
48
+ lastAttachmentPoint = 6;
49
+ deleteAfterDetach = false;
50
+ /** True once a script in the linkset has called llDie. */
51
+ dead = false;
52
+ /** Provenance and initial motion of a script-rezzed object. */
53
+ rez;
54
+ /** Temporary objects expire after 60 seconds of virtual time. */
55
+ expiresAt;
56
+ rezCounter = 0;
36
57
  world;
37
58
  region;
38
- constructor(opts = {}) {
59
+ startParameter;
60
+ startString;
61
+ animesh;
62
+ /**
63
+ * The linksets that share this one's clock and hear its chat: its world's,
64
+ * or, outside a world, this one and every linkset broken off it.
65
+ */
66
+ peers;
67
+ /** `from` is the linkset this one breaks off; outside a world, they share a clock. */
68
+ constructor(opts = {}, from) {
39
69
  this.owner = opts.owner ?? NULL_KEY;
40
70
  this.region = opts.region;
71
+ this.startParameter = opts.startParameter ?? 0;
72
+ this.startString = opts.startString ?? '';
73
+ this.animesh = opts.animesh ?? false;
41
74
  if (opts.world) {
42
75
  opts.world.corner(opts.region);
43
76
  this.world = opts.world;
44
77
  this.clock = opts.world.clock;
45
- opts.world.linksets.push(this);
78
+ this.peers = opts.world.linksets;
79
+ }
80
+ else if (from) {
81
+ this.clock = from.clock;
82
+ this.peers = from.peers;
46
83
  }
47
84
  else {
48
85
  this.clock = new LinksetClock(opts.startUnixTime);
86
+ this.peers = [];
49
87
  }
88
+ this.damageEnabled = from?.damageEnabled
89
+ ?? (((opts.world?.region(opts.region).flags ?? 0) & REGION_FLAG_ALLOW_DAMAGE) !== 0);
90
+ this.damageThrottleExempt = from?.damageThrottleExempt ?? false;
91
+ this.peers.push(this);
50
92
  }
51
93
  /** Add a prim to the linkset; assigns a 1-based linkNumber. */
52
94
  addPrim(prim) {
53
95
  prim.linkset = this;
96
+ prim.createdAt = this.clock.now;
54
97
  this.prims.push(prim);
55
98
  this.recomputeLinkNumbers();
56
99
  return prim;
57
100
  }
101
+ /** Wear a fixture without a script permission request, as a viewer does. */
102
+ attachToAvatar(avatar, point, temporary = false) {
103
+ if (this.dead || this.attachment || !this.prims.length)
104
+ return;
105
+ point &= 255;
106
+ point = point === 0 ? this.lastAttachmentPoint : point > 55 ? 1 : point;
107
+ const order = Math.max(0, ...this.peers.map(l => l.attachment?.order ?? 0)) + 1;
108
+ if (!this.peers.includes(this))
109
+ this.peers.push(this);
110
+ this.lastAttachmentPoint = point;
111
+ this.attachment = { avatar, point, temporary, order };
112
+ for (const script of this.allScripts()) {
113
+ resumeSensors(script);
114
+ resumeTargets(script);
115
+ }
116
+ this.broadcastAttach(avatar);
117
+ }
118
+ /** Detach into inventory, preserving script state and the remembered point. */
119
+ detachFromAvatar() {
120
+ if (!this.attachment)
121
+ return;
122
+ this.deleteAfterDetach = this.attachment.temporary;
123
+ this.attachment = null;
124
+ const index = this.peers.indexOf(this);
125
+ if (index >= 0)
126
+ this.peers.splice(index, 1);
127
+ // A detached object leaves region queries and recurring timers. The final
128
+ // attach event still runs from the shared clock's explicit event queue.
129
+ for (const script of this.allScripts()) {
130
+ pauseSensors(script);
131
+ pauseTargets(script);
132
+ this.clock.purgeTarget(script);
133
+ }
134
+ this.broadcastAttach(NULL_KEY);
135
+ this.finishTemporaryDetach();
136
+ }
137
+ finishTemporaryDetach() {
138
+ if (!this.deleteAfterDetach || this.allScripts().some(s => s.running && s.wakeAt === undefined && this.clock.hasPending(s, 'attach')))
139
+ return;
140
+ this.deleteAfterDetach = false;
141
+ this.remove();
142
+ }
143
+ broadcastAttach(avatar) {
144
+ for (const script of this.allScripts()) {
145
+ if (script.running && !script.dead)
146
+ this.clock.schedule(script, this.clock.now, 'attach', { avatar });
147
+ }
148
+ }
149
+ /** Snapshot an inventory object, or instantiate it in the rezzer's world. */
150
+ copy(opts = {}, from) {
151
+ const copy = new Linkset({ owner: this.owner, animesh: this.animesh, ...opts }, from);
152
+ copy.lastAttachmentPoint = this.lastAttachmentPoint;
153
+ for (const source of this.prims) {
154
+ const prim = copy.addPrim(new Prim({ name: source.name }));
155
+ for (const [name, value] of Object.entries(source)) {
156
+ if (['key', 'linkset', 'linkNumber', 'createdAt', 'scripts', 'inventory', 'keyframedMotion'].includes(name))
157
+ continue;
158
+ Object.assign(prim, { [name]: structuredClone(value) });
159
+ }
160
+ // In-world: scripted derez retains motion; copy only its data, never live callbacks.
161
+ prim.keyframedMotion = source.keyframedMotion?.copyTo(prim, copy.clock) ?? null;
162
+ for (const item of source.inventory) {
163
+ if (item.script) {
164
+ const script = item.script.copyTo(prim);
165
+ Object.assign(prim.inventory.at(-1), { ...item, permMask: { ...item.permMask }, script });
166
+ }
167
+ else
168
+ prim.addInventory({ ...item, permMask: { ...item.permMask } });
169
+ }
170
+ }
171
+ for (const [key, value] of this.linksetData)
172
+ copy.linksetData.set(key, { ...value });
173
+ return copy;
174
+ }
175
+ /** Remove the object and cancel all its scripts, including sleeping handlers. */
176
+ remove() {
177
+ if (this.dead)
178
+ return;
179
+ this.dead = true;
180
+ for (const script of this.allScripts()) {
181
+ script.markDead();
182
+ this.clock.purgeTarget(script);
183
+ }
184
+ const index = this.peers.indexOf(this);
185
+ if (index >= 0)
186
+ this.peers.splice(index, 1);
187
+ this.world?.sensorProperties.delete(this);
188
+ }
189
+ /** Temporary status belongs to the whole object; repeated TRUE keeps its deadline. */
190
+ setTemporary(temporary) {
191
+ for (const prim of this.prims)
192
+ prim.params.tempOnRez = temporary;
193
+ if (temporary)
194
+ this.expiresAt ??= this.clock.now + 60000;
195
+ else
196
+ this.expiresAt = undefined;
197
+ }
58
198
  recomputeLinkNumbers() {
59
199
  if (this.prims.length === 1) {
60
200
  // LSL: a lone unlinked prim reports linkNumber 0.
@@ -65,6 +205,111 @@ export class Linkset {
65
205
  this.prims[i].linkNumber = i + 1;
66
206
  }
67
207
  }
208
+ /**
209
+ * llCreateLink: link `other`'s prims in from link 2, behind this linkset's
210
+ * root, each staying where it is. The root's linkset data stays and keys
211
+ * only `other` holds move over; `other` is left empty and leaves its world.
212
+ * Every script in the result gets changed(CHANGED_LINK).
213
+ */
214
+ absorb(other) {
215
+ if (other !== this) {
216
+ // In-world: linking a mover as a child stops it but retains frames for play after unlink.
217
+ other.prims[0]?.keyframedMotion?.command(KFM_CMD_STOP);
218
+ this.place([this.prims[0], ...other.prims, ...this.prims.slice(1)]);
219
+ mergeLinksetData(this.linksetData, other.linksetData);
220
+ other.prims.length = 0;
221
+ other.linksetData.clear();
222
+ other.peers.splice(other.peers.indexOf(other), 1);
223
+ }
224
+ this.raiseLinkChanged(this.prims);
225
+ }
226
+ /**
227
+ * llBreakLink: take `prim` out into a linkset of its own. The root prim
228
+ * keeps the linkset data; when `prim` is the root, the rest stay linked
229
+ * under the next prim with no data. Every prim of both parts gets
230
+ * changed(CHANGED_LINK). A lone prim is left alone.
231
+ */
232
+ breakOff(prim) {
233
+ if (this.prims.length < 2)
234
+ return;
235
+ const rest = this.prims.filter((p) => p !== prim);
236
+ const all = [...this.prims];
237
+ if (prim === this.prims[0]) {
238
+ this.splitOff(rest);
239
+ this.place([prim]);
240
+ }
241
+ else {
242
+ this.splitOff([prim]);
243
+ this.place(rest);
244
+ }
245
+ this.raiseLinkChanged(all);
246
+ }
247
+ /** llBreakAllLinks: break every prim apart; each gets changed(CHANGED_LINK). */
248
+ breakAll() {
249
+ if (this.prims.length < 2)
250
+ return;
251
+ const all = [...this.prims];
252
+ for (const p of all.slice(1))
253
+ this.splitOff([p]);
254
+ this.place([all[0]]);
255
+ this.raiseLinkChanged(all);
256
+ }
257
+ /** Move `prims` into a new linkset in this one's world and region, with no linkset data. */
258
+ splitOff(prims) {
259
+ const opts = {
260
+ owner: this.owner,
261
+ startParameter: this.startParameter,
262
+ startString: this.startString,
263
+ };
264
+ if (this.world)
265
+ opts.world = this.world;
266
+ if (this.region !== undefined)
267
+ opts.region = this.region;
268
+ new Linkset(opts, this).place(prims);
269
+ }
270
+ /**
271
+ * Make `prims` this linkset's prims, the first as root, keeping each prim
272
+ * at its region position and rotation.
273
+ */
274
+ place(prims) {
275
+ const placed = prims.map((p) => ({ p, pos: p.regionPosition(), rot: p.regionRotation() }));
276
+ this.prims.splice(0, this.prims.length, ...prims);
277
+ const root = placed[0];
278
+ const inverse = conjugate(root.rot);
279
+ for (const { p, pos, rot } of placed) {
280
+ p.linkset = this;
281
+ if (p === root.p) {
282
+ p.params.position = pos;
283
+ p.params.rotation = rot;
284
+ }
285
+ else {
286
+ const offset = { x: pos.x - root.pos.x, y: pos.y - root.pos.y, z: pos.z - root.pos.z };
287
+ p.params.position = rotateVector(offset, inverse);
288
+ p.params.rotation = mulRotation(rot, inverse);
289
+ }
290
+ }
291
+ this.recomputeLinkNumbers();
292
+ }
293
+ /**
294
+ * Queue changed(CHANGED_LINK) on every script in `prims`. As in Second
295
+ * Life, a stopped script never gets it, and a script skips it while one
296
+ * queued since it last started or woke is still waiting, or while two are.
297
+ */
298
+ raiseLinkChanged(prims) {
299
+ const pending = this.clock
300
+ .pendingEvents()
301
+ .filter((e) => e.event === 'changed' && e.payload['changes'] === CHANGED_LINK);
302
+ for (const p of prims) {
303
+ for (const s of p.scripts) {
304
+ if (!s.running)
305
+ continue;
306
+ const waiting = pending.filter((e) => e.target === s);
307
+ if (waiting.length >= 2 || waiting.some((e) => e.at >= s.resumedAt))
308
+ continue;
309
+ this.clock.schedule(s, this.clock.now, 'changed', { changes: CHANGED_LINK });
310
+ }
311
+ }
312
+ }
68
313
  /** Flat list of every script in every prim, in prim/inventory order. */
69
314
  allScripts() {
70
315
  const out = [];
@@ -120,8 +365,9 @@ export class Linkset {
120
365
  /**
121
366
  * Send a `link_message` according to LSL fan-out semantics.
122
367
  * `senderLink` is the calling prim's link number; the event payload's
123
- * `sender_num` is set to that value. The capture array on the linkset
124
- * records every invocation for cross-script test assertions.
368
+ * `sender_num` is set to that value. Scripts that are not running never
369
+ * get the message. The capture array on the linkset records every
370
+ * invocation for cross-script test assertions.
125
371
  */
126
372
  deliverLinkMessage(senderLink, target, num, str, id) {
127
373
  this.linkedMessages.push({ target, num, str, id });
@@ -129,7 +375,8 @@ export class Linkset {
129
375
  const at = this.clock.now;
130
376
  for (const p of targets) {
131
377
  for (const s of p.scripts) {
132
- this.clock.schedule(s, at, 'link_message', { sender_num: senderLink, num, str, id });
378
+ if (s.running)
379
+ this.clock.schedule(s, at, 'link_message', { sender_num: senderLink, num, str, id });
133
380
  }
134
381
  }
135
382
  }
@@ -139,10 +386,7 @@ export class Linkset {
139
386
  * available for the single-script case (delivers only to that script).
140
387
  */
141
388
  deliverChat(opts) {
142
- for (const s of this.allScripts()) {
143
- s.matchChatListens(opts);
144
- }
145
- this.drainQueue();
389
+ this.settle(this.allScripts().filter((s) => s.matchChatListens(opts) && s.handles('listen')));
146
390
  }
147
391
  /**
148
392
  * Queue chat a script in prim `from` sent on the listens of every prim it
@@ -155,20 +399,98 @@ export class Linkset {
155
399
  const origin = this.globalPosition(from);
156
400
  const range = CHAT_RANGE[type] ?? 0;
157
401
  const reaches = (linkset, p) => {
402
+ if (p === from)
403
+ return false;
158
404
  if (type === 'regionSay')
159
405
  return linkset.region === this.region;
160
406
  if (type === 'regionSayTo')
161
407
  return linkset.region === this.region && to !== NULL_KEY && p.key === to;
162
408
  return distanceSquared(origin, linkset.globalPosition(p)) <= range * range;
163
409
  };
164
- for (const linkset of this.world?.linksets ?? [this]) {
410
+ this.broadcast(reaches, { channel, name: from.name, key: from.key, message });
411
+ }
412
+ /**
413
+ * Queue an avatar's dialog answer on the listens of every prim within
414
+ * 20 m of `from`, the prim that showed the dialog, including `from`
415
+ * itself. Returns the scripts that matched.
416
+ */
417
+ routeAvatarChat(from, chat) {
418
+ const origin = this.globalPosition(from);
419
+ const range = CHAT_RANGE.say;
420
+ return this.broadcast((linkset, p) => distanceSquared(origin, linkset.globalPosition(p)) <= range * range, chat);
421
+ }
422
+ broadcast(reaches, chat) {
423
+ const matched = [];
424
+ for (const linkset of this.peers) {
165
425
  for (const p of linkset.prims) {
166
- if (p === from || !reaches(linkset, p))
426
+ if (!reaches(linkset, p))
167
427
  continue;
168
428
  for (const s of p.scripts)
169
- s.matchChatListens({ channel, name: from.name, key: from.key, message });
429
+ if (s.matchChatListens(chat))
430
+ matched.push(s);
431
+ }
432
+ }
433
+ return matched;
434
+ }
435
+ /**
436
+ * Click link `link` as an avatar. Each script in that prim gets
437
+ * `touch_start`, `touch` and `touch_end`, if it handles them. The click
438
+ * also reaches the root's scripts when the prim set PASS_ALWAYS, or when
439
+ * no running script in it handles any touch event and it did not set
440
+ * PASS_NEVER. In every receiver llDetectedLinkNumber is `link` and
441
+ * llDetectedTouchFace is `face`. `touch_end` is queued `hold` ms after
442
+ * the click, only for receivers still running then; `touch` fires once,
443
+ * right after `touch_start`.
444
+ */
445
+ touch(link, opts = {}) {
446
+ const prim = this.prims.length === 1 && (link === 0 || link === LINK_ROOT)
447
+ ? this.prims[0]
448
+ : this.prims.find((p) => p.linkNumber === link);
449
+ if (!prim)
450
+ throw new Error(`touch: no prim with link number ${link}`);
451
+ const root = this.prims[0];
452
+ for (const s of new Set([...prim.scripts, ...root.scripts]))
453
+ if (s.running)
454
+ s.start();
455
+ const handlers = (p) => p.scripts.filter((s) => s.running && !s.dead && TOUCH_EVENTS.some((e) => s.handles(e)));
456
+ const receivers = handlers(prim);
457
+ const pass = prim.params.passTouches;
458
+ if (prim !== root && (pass === PASS_ALWAYS || (pass !== PASS_NEVER && receivers.length === 0))) {
459
+ receivers.push(...handlers(root));
460
+ }
461
+ const avatar = opts.avatar ?? { key: this.owner, name: '' };
462
+ const detected = [
463
+ {
464
+ ...avatar,
465
+ linkNumber: prim.linkNumber,
466
+ touchFace: opts.face ?? 0,
467
+ ...(opts.st && { touchST: opts.st }),
468
+ ...(opts.uv && { touchUV: opts.uv }),
469
+ },
470
+ ];
471
+ // Under llMinEventDelay a script holds one waiting click; it drops the others.
472
+ const dropped = new Set(receivers.filter((s) => s.clockView.minEventDelayMs > 0 && this.clock.hasPending(s, 'touch_start')));
473
+ const queue = (events) => {
474
+ for (const s of receivers) {
475
+ if (dropped.has(s))
476
+ continue;
477
+ if (!s.running || s.dead)
478
+ continue;
479
+ for (const e of events) {
480
+ if (s.handles(e))
481
+ this.clock.schedule(s, this.clock.now, e, { num_detected: 1, detected });
482
+ }
170
483
  }
484
+ };
485
+ if (opts.hold) {
486
+ queue(['touch_start', 'touch']);
487
+ this.advanceTime(opts.hold);
488
+ queue(['touch_end']);
171
489
  }
490
+ else {
491
+ queue(TOUCH_EVENTS);
492
+ }
493
+ this.settle(receivers);
172
494
  }
173
495
  globalPosition(prim) {
174
496
  const p = prim.regionPosition();
@@ -182,7 +504,8 @@ export class Linkset {
182
504
  * due across the linkset, or its whole world, dispatching each to its
183
505
  * target script. The clock steps to each
184
506
  * event's due time before its handler runs, so handlers see the time the
185
- * event fired rather than the end of the window.
507
+ * event fired rather than the end of the window. The clock ends exactly
508
+ * `ms` later; a handler sleeping past that stays asleep until a later advance.
186
509
  */
187
510
  advanceTime(ms) {
188
511
  if (ms < 0)
@@ -192,34 +515,83 @@ export class Linkset {
192
515
  if (this.clock.now < until)
193
516
  this.clock.now = until;
194
517
  }
518
+ /**
519
+ * Finish the handlers already active or queued on `scripts`, including
520
+ * their reset/state-change chains. Future recurring events do not extend
521
+ * this call indefinitely; tests run those with advanceTime.
522
+ */
523
+ settle(scripts) {
524
+ const pending = this.clock.pendingEvents();
525
+ const goals = scripts.map(script => ({
526
+ script,
527
+ completed: script.clockView.completedHandlers + Number(script.wakeAt !== undefined) +
528
+ pending.filter(e => e.target === script && e.at <= this.clock.now && script.handles(e.event)).length,
529
+ }));
530
+ this.drainQueue();
531
+ for (;;) {
532
+ let at = Infinity;
533
+ for (const { script, completed } of goals) {
534
+ // Inventory suspends sleeping detach handlers until the object is worn
535
+ // again. They cannot complete as goals of this settling call.
536
+ if (script.running && script.linkset.peers.includes(script.linkset) &&
537
+ script.clockView.completedHandlers < completed && script.wakeAt !== undefined) {
538
+ at = Math.min(at, script.wakeAt);
539
+ }
540
+ }
541
+ if (at === Infinity)
542
+ return;
543
+ this.drainQueue(at);
544
+ }
545
+ }
195
546
  /**
196
547
  * Drain due events in chronological order. Each event is delivered to
197
548
  * its target script via `script.deliver(event, payload)`. If a handler
198
549
  * triggers more events (timers, chained chats, …) they may become due
199
550
  * inside this loop and are picked up in the next iteration.
200
551
  *
201
- * The script roster is captured once per drain. Adding a script
202
- * mid-drain is rare (and would require an explicit prim mutation by a
203
- * builtin); when it happens, the new script's events are simply picked
204
- * up on the next outer drain. Worth-the-trade for avoiding an O(scripts)
205
- * allocation per event.
552
+ * Refresh the script roster for each event: a handler may rez or remove
553
+ * an object, changing which scripts can wake on this drain.
206
554
  */
207
555
  drainQueue(until = this.clock.now) {
208
- const scripts = this.world?.allScripts() ?? this.allScripts();
209
- if (scripts.length === 0)
210
- return;
211
556
  while (true) {
212
- const next = this.clock.takeNextDue(scripts, Math.max(until, this.clock.now));
213
- if (!next)
214
- return;
557
+ flushDamageEvents(this.clock);
558
+ const scripts = this.peers.flatMap((l) => l.allScripts());
559
+ const horizon = Math.max(until, this.clock.now);
560
+ let expiry = Infinity;
561
+ for (const linkset of this.peers) {
562
+ if (!linkset.prims[0]?.params.tempOnRez)
563
+ linkset.expiresAt = undefined;
564
+ else {
565
+ linkset.expiresAt ??= this.clock.now + 60000;
566
+ expiry = Math.min(expiry, linkset.expiresAt);
567
+ }
568
+ }
569
+ const next = this.clock.takeNextDue(scripts, Math.min(horizon, expiry));
570
+ if (!next) {
571
+ if (expiry > horizon)
572
+ return;
573
+ this.clock.now = Math.max(this.clock.now, expiry);
574
+ for (const linkset of [...this.peers]) {
575
+ if (linkset.expiresAt !== undefined && linkset.expiresAt <= this.clock.now)
576
+ linkset.remove();
577
+ }
578
+ continue;
579
+ }
215
580
  if (next.at > this.clock.now)
216
581
  this.clock.now = next.at;
217
582
  const target = next.target;
218
583
  if (target.dead)
219
584
  continue;
220
- // `__reset` (from llResetOtherScript) must run regardless of the
221
- // target's running flag — per LSL, a stopped script is still reset
222
- // when commanded, it just stays stopped afterward.
585
+ if (next.event === '__wake') {
586
+ // A simulator task may have detached this object after the clock
587
+ // captured its script roster. Inventory must not resume the handler.
588
+ if (target.linkset.peers.includes(target.linkset))
589
+ target.wake();
590
+ continue;
591
+ }
592
+ // `__reset` (from llResetOtherScript) was requested while the target
593
+ // was running, so it applies even if the target was stopped since; the
594
+ // target just stays stopped afterward.
223
595
  if (!target.running && next.event !== '__reset') {
224
596
  // Park for replay when the script is re-enabled. A paused script
225
597
  // must not block other scripts' events, so we stash on the script
@@ -230,6 +602,7 @@ export class Linkset {
230
602
  // ResetScriptSignal is caught inside `Script.runHandler`; it never
231
603
  // bubbles up to here, so no try/catch is needed.
232
604
  target.deliver(next.event, next.payload);
605
+ target.linkset.finishTemporaryDetach();
233
606
  }
234
607
  }
235
608
  }
@@ -1 +1 @@
1
- {"version":3,"file":"linkset.js","sourceRoot":"","sources":["../src/linkset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"linkset.js","sourceRoot":"","sources":["../src/linkset.ts"],"names":[],"mappings":"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"}
package/dist/memory.d.ts CHANGED
@@ -1,8 +1,11 @@
1
1
  import type { FunctionDeclaration, Script as Ast } from '@rezless/parser';
2
2
  import type { LslType, LslValue } from './values/types.js';
3
- /** A fatal Stack-Heap Collision: the script ran out of memory. */
4
- export declare class StackHeapCollision extends Error {
3
+ /** A fatal run-time error: the script reports it and halts. */
4
+ export declare class RuntimeError extends Error {
5
5
  reported: boolean;
6
+ }
7
+ /** A fatal Stack-Heap Collision: the script ran out of memory. */
8
+ export declare class StackHeapCollision extends RuntimeError {
6
9
  constructor();
7
10
  }
8
11
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,mBAAmB,EAAE,MAAM,IAAI,GAAG,EAAa,MAAM,iBAAiB,CAAA;AAChG,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAc1D,kEAAkE;AAClE,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,UAAQ;IAEhB,cAGC;CACF;AAED;;;;GAIG;AACH,qBAAa,MAAM;IAYf,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAX3B,KAAK,SAAa;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,SAAI;IACR,SAAS,UAAQ;IACjB,qCAAqC;IACrC,MAAM,SAAI;IACV,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,cAAc,CAAI;IAE1B,YACE,IAAI,EAAE,MAAM,EACK,QAAQ,EAAE,OAAO,EAGnC;IAED,6EAA6E;IAC7E,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAKzB;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAG9B;IAED,6DAA6D;IAC7D,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAGhC;IAED,0FAA0F;IAC1F,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAO7B;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE5B;IAED,yGAAyG;IACzG,UAAU,IAAI,IAAI,CAGjB;IAED,YAAY,IAAI,IAAI,CAGnB;IAED,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAI/B;IAED,cAAc,IAAI,IAAI,CAGrB;CACF;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,mBAAmB,GAAG,MAAM,CAO1D;AAmCD,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAelE;AAED,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,MAAM,CAU/D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAQ1C"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,mBAAmB,EAAE,MAAM,IAAI,GAAG,EAAa,MAAM,iBAAiB,CAAA;AAChG,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAc1D,+DAA+D;AAC/D,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,UAAQ;CACjB;AAED,kEAAkE;AAClE,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,cAGC;CACF;AAED;;;;GAIG;AACH,qBAAa,MAAM;IAYf,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAX3B,KAAK,SAAa;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,SAAI;IACR,SAAS,UAAQ;IACjB,qCAAqC;IACrC,MAAM,SAAI;IACV,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,cAAc,CAAI;IAE1B,YACE,IAAI,EAAE,MAAM,EACK,QAAQ,EAAE,OAAO,EAGnC;IAED,6EAA6E;IAC7E,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAKzB;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAG9B;IAED,6DAA6D;IAC7D,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAGhC;IAED,0FAA0F;IAC1F,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAO7B;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE5B;IAED,yGAAyG;IACzG,UAAU,IAAI,IAAI,CAGjB;IAED,YAAY,IAAI,IAAI,CAGnB;IAED,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAI/B;IAED,cAAc,IAAI,IAAI,CAGrB;CACF;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,mBAAmB,GAAG,MAAM,CAO1D;AAmCD,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAelE;AAED,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,MAAM,CAU/D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAQ1C"}
package/dist/memory.js CHANGED
@@ -6,9 +6,12 @@ const SCRIPT_BASE = 292;
6
6
  const CODE_BLOCK = 512;
7
7
  const FRAME_BYTES = 46;
8
8
  const LIST_HEADER = 36;
9
- /** A fatal Stack-Heap Collision: the script ran out of memory. */
10
- export class StackHeapCollision extends Error {
9
+ /** A fatal run-time error: the script reports it and halts. */
10
+ export class RuntimeError extends Error {
11
11
  reported = false;
12
+ }
13
+ /** A fatal Stack-Heap Collision: the script ran out of memory. */
14
+ export class StackHeapCollision extends RuntimeError {
12
15
  constructor() {
13
16
  super('Stack-Heap Collision');
14
17
  this.name = 'StackHeapCollision';