@swf2es/runtime 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/LICENSE.third-party +422 -0
- package/README.md +29 -2
- package/dist/avm1/activation.d.ts +108 -0
- package/dist/avm1/activation.d.ts.map +1 -0
- package/dist/avm1/activation.js +90 -0
- package/dist/avm1/activation.js.map +1 -0
- package/dist/avm1/case.d.ts +3 -0
- package/dist/avm1/case.d.ts.map +1 -0
- package/dist/avm1/case.js +250 -0
- package/dist/avm1/case.js.map +1 -0
- package/dist/avm1/clips.d.ts +68 -0
- package/dist/avm1/clips.d.ts.map +1 -0
- package/dist/avm1/clips.js +335 -0
- package/dist/avm1/clips.js.map +1 -0
- package/dist/avm1/control.d.ts +54 -0
- package/dist/avm1/control.d.ts.map +1 -0
- package/dist/avm1/control.js +281 -0
- package/dist/avm1/control.js.map +1 -0
- package/dist/avm1/errors.d.ts +49 -0
- package/dist/avm1/errors.d.ts.map +1 -0
- package/dist/avm1/errors.js +51 -0
- package/dist/avm1/errors.js.map +1 -0
- package/dist/avm1/functions.d.ts +94 -0
- package/dist/avm1/functions.d.ts.map +1 -0
- package/dist/avm1/functions.js +250 -0
- package/dist/avm1/functions.js.map +1 -0
- package/dist/avm1/globals/array.d.ts +8 -0
- package/dist/avm1/globals/array.d.ts.map +1 -0
- package/dist/avm1/globals/array.js +550 -0
- package/dist/avm1/globals/array.js.map +1 -0
- package/dist/avm1/globals/broadcaster.d.ts +22 -0
- package/dist/avm1/globals/broadcaster.d.ts.map +1 -0
- package/dist/avm1/globals/broadcaster.js +132 -0
- package/dist/avm1/globals/broadcaster.js.map +1 -0
- package/dist/avm1/globals/date.d.ts +10 -0
- package/dist/avm1/globals/date.d.ts.map +1 -0
- package/dist/avm1/globals/date.js +437 -0
- package/dist/avm1/globals/date.js.map +1 -0
- package/dist/avm1/globals/global.d.ts +23 -0
- package/dist/avm1/globals/global.d.ts.map +1 -0
- package/dist/avm1/globals/global.js +345 -0
- package/dist/avm1/globals/global.js.map +1 -0
- package/dist/avm1/globals/math.d.ts +7 -0
- package/dist/avm1/globals/math.d.ts.map +1 -0
- package/dist/avm1/globals/math.js +140 -0
- package/dist/avm1/globals/math.js.map +1 -0
- package/dist/avm1/globals/number.d.ts +11 -0
- package/dist/avm1/globals/number.d.ts.map +1 -0
- package/dist/avm1/globals/number.js +94 -0
- package/dist/avm1/globals/number.js.map +1 -0
- package/dist/avm1/globals/string.d.ts +8 -0
- package/dist/avm1/globals/string.d.ts.map +1 -0
- package/dist/avm1/globals/string.js +202 -0
- package/dist/avm1/globals/string.js.map +1 -0
- package/dist/avm1/globals/timers.d.ts +49 -0
- package/dist/avm1/globals/timers.d.ts.map +1 -0
- package/dist/avm1/globals/timers.js +130 -0
- package/dist/avm1/globals/timers.js.map +1 -0
- package/dist/avm1/host.d.ts +146 -0
- package/dist/avm1/host.d.ts.map +1 -0
- package/dist/avm1/host.js +6 -0
- package/dist/avm1/host.js.map +1 -0
- package/dist/avm1/index.d.ts +15 -0
- package/dist/avm1/index.d.ts.map +1 -0
- package/dist/avm1/index.js +15 -0
- package/dist/avm1/index.js.map +1 -0
- package/dist/avm1/inheritance.d.ts +25 -0
- package/dist/avm1/inheritance.d.ts.map +1 -0
- package/dist/avm1/inheritance.js +133 -0
- package/dist/avm1/inheritance.js.map +1 -0
- package/dist/avm1/numbers.d.ts +21 -0
- package/dist/avm1/numbers.d.ts.map +1 -0
- package/dist/avm1/numbers.js +299 -0
- package/dist/avm1/numbers.js.map +1 -0
- package/dist/avm1/objects.d.ts +245 -0
- package/dist/avm1/objects.d.ts.map +1 -0
- package/dist/avm1/objects.js +897 -0
- package/dist/avm1/objects.js.map +1 -0
- package/dist/avm1/operators.d.ts +45 -0
- package/dist/avm1/operators.d.ts.map +1 -0
- package/dist/avm1/operators.js +171 -0
- package/dist/avm1/operators.js.map +1 -0
- package/dist/avm1/realm.d.ts +126 -0
- package/dist/avm1/realm.d.ts.map +1 -0
- package/dist/avm1/realm.js +530 -0
- package/dist/avm1/realm.js.map +1 -0
- package/dist/avm1/runtime.d.ts +294 -0
- package/dist/avm1/runtime.d.ts.map +1 -0
- package/dist/avm1/runtime.js +883 -0
- package/dist/avm1/runtime.js.map +1 -0
- package/dist/avm1/scope.d.ts +77 -0
- package/dist/avm1/scope.d.ts.map +1 -0
- package/dist/avm1/scope.js +386 -0
- package/dist/avm1/scope.js.map +1 -0
- package/dist/avm1/urls.d.ts +25 -0
- package/dist/avm1/urls.d.ts.map +1 -0
- package/dist/avm1/urls.js +181 -0
- package/dist/avm1/urls.js.map +1 -0
- package/dist/avm1/values.d.ts +52 -0
- package/dist/avm1/values.d.ts.map +1 -0
- package/dist/avm1/values.js +98 -0
- package/dist/avm1/values.js.map +1 -0
- package/dist/avm2/amf-classes.d.ts +28 -0
- package/dist/avm2/amf-classes.d.ts.map +1 -0
- package/dist/avm2/amf-classes.js +67 -0
- package/dist/avm2/amf-classes.js.map +1 -0
- package/dist/avm2/amf.d.ts +96 -0
- package/dist/avm2/amf.d.ts.map +1 -0
- package/dist/avm2/amf.js +802 -0
- package/dist/avm2/amf.js.map +1 -0
- package/dist/avm2/array-conversion.d.ts +31 -0
- package/dist/avm2/array-conversion.d.ts.map +1 -0
- package/dist/avm2/array-conversion.js +101 -0
- package/dist/avm2/array-conversion.js.map +1 -0
- package/dist/avm2/builtin-library.d.ts +2 -0
- package/dist/avm2/builtin-library.d.ts.map +1 -0
- package/dist/avm2/builtin-library.js +22 -0
- package/dist/avm2/builtin-library.js.map +1 -0
- package/dist/avm2/cache-fill.d.ts +14 -0
- package/dist/avm2/cache-fill.d.ts.map +1 -0
- package/dist/avm2/cache-fill.js +87 -0
- package/dist/avm2/cache-fill.js.map +1 -0
- package/dist/avm2/classes.d.ts +17 -0
- package/dist/avm2/classes.d.ts.map +1 -0
- package/dist/avm2/classes.js +212 -0
- package/dist/avm2/classes.js.map +1 -0
- package/dist/avm2/definitions.d.ts +28 -0
- package/dist/avm2/definitions.d.ts.map +1 -0
- package/dist/avm2/definitions.js +70 -0
- package/dist/avm2/definitions.js.map +1 -0
- package/dist/avm2/descriptors.d.ts +118 -0
- package/dist/avm2/descriptors.d.ts.map +1 -0
- package/dist/avm2/descriptors.js +6 -0
- package/dist/avm2/descriptors.js.map +1 -0
- package/dist/avm2/dictionary-keys.d.ts +73 -0
- package/dist/avm2/dictionary-keys.d.ts.map +1 -0
- package/dist/avm2/dictionary-keys.js +296 -0
- package/dist/avm2/dictionary-keys.js.map +1 -0
- package/dist/avm2/domain-memory.d.ts +23 -0
- package/dist/avm2/domain-memory.d.ts.map +1 -0
- package/dist/avm2/domain-memory.js +76 -0
- package/dist/avm2/domain-memory.js.map +1 -0
- package/dist/avm2/domain.d.ts +108 -0
- package/dist/avm2/domain.d.ts.map +1 -0
- package/dist/avm2/domain.js +281 -0
- package/dist/avm2/domain.js.map +1 -0
- package/dist/avm2/dynamic-properties.d.ts +62 -0
- package/dist/avm2/dynamic-properties.d.ts.map +1 -0
- package/dist/avm2/dynamic-properties.js +183 -0
- package/dist/avm2/dynamic-properties.js.map +1 -0
- package/dist/avm2/enumeration.d.ts +75 -0
- package/dist/avm2/enumeration.d.ts.map +1 -0
- package/dist/avm2/enumeration.js +394 -0
- package/dist/avm2/enumeration.js.map +1 -0
- package/dist/avm2/errors.d.ts +20 -0
- package/dist/avm2/errors.d.ts.map +1 -0
- package/dist/avm2/errors.js +46 -0
- package/dist/avm2/errors.js.map +1 -0
- package/dist/avm2/float-library.d.ts +2 -0
- package/dist/avm2/float-library.d.ts.map +1 -0
- package/dist/avm2/float-library.js +67 -0
- package/dist/avm2/float-library.js.map +1 -0
- package/dist/avm2/float.d.ts +9 -0
- package/dist/avm2/float.d.ts.map +1 -0
- package/dist/avm2/float.js +27 -0
- package/dist/avm2/float.js.map +1 -0
- package/dist/avm2/hooks.d.ts +77 -0
- package/dist/avm2/hooks.d.ts.map +1 -0
- package/dist/avm2/hooks.js +20 -0
- package/dist/avm2/hooks.js.map +1 -0
- package/dist/avm2/index.d.ts +32 -0
- package/dist/avm2/index.d.ts.map +1 -0
- package/dist/avm2/index.js +39 -0
- package/dist/avm2/index.js.map +1 -0
- package/dist/avm2/messages.d.ts +2 -0
- package/dist/avm2/messages.d.ts.map +1 -0
- package/dist/avm2/messages.js +178 -0
- package/dist/avm2/messages.js.map +1 -0
- package/dist/avm2/method-factories.d.ts +35 -0
- package/dist/avm2/method-factories.d.ts.map +1 -0
- package/dist/avm2/method-factories.js +96 -0
- package/dist/avm2/method-factories.js.map +1 -0
- package/dist/avm2/modules.d.ts +40 -0
- package/dist/avm2/modules.d.ts.map +1 -0
- package/dist/avm2/modules.js +106 -0
- package/dist/avm2/modules.js.map +1 -0
- package/dist/avm2/names.d.ts +143 -0
- package/dist/avm2/names.d.ts.map +1 -0
- package/dist/avm2/names.js +249 -0
- package/dist/avm2/names.js.map +1 -0
- package/dist/avm2/natives/aliases.d.ts +3 -0
- package/dist/avm2/natives/aliases.d.ts.map +1 -0
- package/dist/avm2/natives/aliases.js +48 -0
- package/dist/avm2/natives/aliases.js.map +1 -0
- package/dist/avm2/natives/array.d.ts +5 -0
- package/dist/avm2/natives/array.d.ts.map +1 -0
- package/dist/avm2/natives/array.js +391 -0
- package/dist/avm2/natives/array.js.map +1 -0
- package/dist/avm2/natives/bytearray.d.ts +180 -0
- package/dist/avm2/natives/bytearray.d.ts.map +1 -0
- package/dist/avm2/natives/bytearray.js +1228 -0
- package/dist/avm2/natives/bytearray.js.map +1 -0
- package/dist/avm2/natives/case.d.ts +5 -0
- package/dist/avm2/natives/case.d.ts.map +1 -0
- package/dist/avm2/natives/case.js +89 -0
- package/dist/avm2/natives/case.js.map +1 -0
- package/dist/avm2/natives/concurrent.d.ts +24 -0
- package/dist/avm2/natives/concurrent.d.ts.map +1 -0
- package/dist/avm2/natives/concurrent.js +200 -0
- package/dist/avm2/natives/concurrent.js.map +1 -0
- package/dist/avm2/natives/date.d.ts +5 -0
- package/dist/avm2/natives/date.d.ts.map +1 -0
- package/dist/avm2/natives/date.js +582 -0
- package/dist/avm2/natives/date.js.map +1 -0
- package/dist/avm2/natives/define.d.ts +58 -0
- package/dist/avm2/natives/define.d.ts.map +1 -0
- package/dist/avm2/natives/define.js +131 -0
- package/dist/avm2/natives/define.js.map +1 -0
- package/dist/avm2/natives/describe.d.ts +3 -0
- package/dist/avm2/natives/describe.d.ts.map +1 -0
- package/dist/avm2/natives/describe.js +352 -0
- package/dist/avm2/natives/describe.js.map +1 -0
- package/dist/avm2/natives/dictionary.d.ts +3 -0
- package/dist/avm2/natives/dictionary.d.ts.map +1 -0
- package/dist/avm2/natives/dictionary.js +13 -0
- package/dist/avm2/natives/dictionary.js.map +1 -0
- package/dist/avm2/natives/float-vector.d.ts +20 -0
- package/dist/avm2/natives/float-vector.d.ts.map +1 -0
- package/dist/avm2/natives/float-vector.js +82 -0
- package/dist/avm2/natives/float-vector.js.map +1 -0
- package/dist/avm2/natives/float.d.ts +5 -0
- package/dist/avm2/natives/float.d.ts.map +1 -0
- package/dist/avm2/natives/float.js +97 -0
- package/dist/avm2/natives/float.js.map +1 -0
- package/dist/avm2/natives/index.d.ts +7 -0
- package/dist/avm2/natives/index.d.ts.map +1 -0
- package/dist/avm2/natives/index.js +65 -0
- package/dist/avm2/natives/index.js.map +1 -0
- package/dist/avm2/natives/json.d.ts +3 -0
- package/dist/avm2/natives/json.d.ts.map +1 -0
- package/dist/avm2/natives/json.js +515 -0
- package/dist/avm2/natives/json.js.map +1 -0
- package/dist/avm2/natives/number.d.ts +15 -0
- package/dist/avm2/natives/number.d.ts.map +1 -0
- package/dist/avm2/natives/number.js +163 -0
- package/dist/avm2/natives/number.js.map +1 -0
- package/dist/avm2/natives/object.d.ts +8 -0
- package/dist/avm2/natives/object.d.ts.map +1 -0
- package/dist/avm2/natives/object.js +238 -0
- package/dist/avm2/natives/object.js.map +1 -0
- package/dist/avm2/natives/proxy.d.ts +5 -0
- package/dist/avm2/natives/proxy.d.ts.map +1 -0
- package/dist/avm2/natives/proxy.js +76 -0
- package/dist/avm2/natives/proxy.js.map +1 -0
- package/dist/avm2/natives/regexp.d.ts +21 -0
- package/dist/avm2/natives/regexp.d.ts.map +1 -0
- package/dist/avm2/natives/regexp.js +486 -0
- package/dist/avm2/natives/regexp.js.map +1 -0
- package/dist/avm2/natives/shell-workers.d.ts +140 -0
- package/dist/avm2/natives/shell-workers.d.ts.map +1 -0
- package/dist/avm2/natives/shell-workers.js +405 -0
- package/dist/avm2/natives/shell-workers.js.map +1 -0
- package/dist/avm2/natives/shell.d.ts +12 -0
- package/dist/avm2/natives/shell.d.ts.map +1 -0
- package/dist/avm2/natives/shell.js +558 -0
- package/dist/avm2/natives/shell.js.map +1 -0
- package/dist/avm2/natives/sort.d.ts +7 -0
- package/dist/avm2/natives/sort.d.ts.map +1 -0
- package/dist/avm2/natives/sort.js +378 -0
- package/dist/avm2/natives/sort.js.map +1 -0
- package/dist/avm2/natives/string.d.ts +5 -0
- package/dist/avm2/natives/string.d.ts.map +1 -0
- package/dist/avm2/natives/string.js +133 -0
- package/dist/avm2/natives/string.js.map +1 -0
- package/dist/avm2/natives/sync.d.ts +215 -0
- package/dist/avm2/natives/sync.d.ts.map +1 -0
- package/dist/avm2/natives/sync.js +822 -0
- package/dist/avm2/natives/sync.js.map +1 -0
- package/dist/avm2/natives/toplevel.d.ts +5 -0
- package/dist/avm2/natives/toplevel.d.ts.map +1 -0
- package/dist/avm2/natives/toplevel.js +140 -0
- package/dist/avm2/natives/toplevel.js.map +1 -0
- package/dist/avm2/natives/vector-elements.d.ts +10 -0
- package/dist/avm2/natives/vector-elements.d.ts.map +1 -0
- package/dist/avm2/natives/vector-elements.js +47 -0
- package/dist/avm2/natives/vector-elements.js.map +1 -0
- package/dist/avm2/natives/vector.d.ts +5 -0
- package/dist/avm2/natives/vector.d.ts.map +1 -0
- package/dist/avm2/natives/vector.js +407 -0
- package/dist/avm2/natives/vector.js.map +1 -0
- package/dist/avm2/natives/xml/access.d.ts +34 -0
- package/dist/avm2/natives/xml/access.d.ts.map +1 -0
- package/dist/avm2/natives/xml/access.js +634 -0
- package/dist/avm2/natives/xml/access.js.map +1 -0
- package/dist/avm2/natives/xml/build.d.ts +11 -0
- package/dist/avm2/natives/xml/build.d.ts.map +1 -0
- package/dist/avm2/natives/xml/build.js +292 -0
- package/dist/avm2/natives/xml/build.js.map +1 -0
- package/dist/avm2/natives/xml/chars.d.ts +9 -0
- package/dist/avm2/natives/xml/chars.d.ts.map +1 -0
- package/dist/avm2/natives/xml/chars.js +113 -0
- package/dist/avm2/natives/xml/chars.js.map +1 -0
- package/dist/avm2/natives/xml/escape.d.ts +5 -0
- package/dist/avm2/natives/xml/escape.d.ts.map +1 -0
- package/dist/avm2/natives/xml/escape.js +39 -0
- package/dist/avm2/natives/xml/escape.js.map +1 -0
- package/dist/avm2/natives/xml/names.d.ts +46 -0
- package/dist/avm2/natives/xml/names.d.ts.map +1 -0
- package/dist/avm2/natives/xml/names.js +205 -0
- package/dist/avm2/natives/xml/names.js.map +1 -0
- package/dist/avm2/natives/xml/node.d.ts +94 -0
- package/dist/avm2/natives/xml/node.d.ts.map +1 -0
- package/dist/avm2/natives/xml/node.js +273 -0
- package/dist/avm2/natives/xml/node.js.map +1 -0
- package/dist/avm2/natives/xml/operators.d.ts +7 -0
- package/dist/avm2/natives/xml/operators.d.ts.map +1 -0
- package/dist/avm2/natives/xml/operators.js +70 -0
- package/dist/avm2/natives/xml/operators.js.map +1 -0
- package/dist/avm2/natives/xml/parser.d.ts +51 -0
- package/dist/avm2/natives/xml/parser.d.ts.map +1 -0
- package/dist/avm2/natives/xml/parser.js +357 -0
- package/dist/avm2/natives/xml/parser.js.map +1 -0
- package/dist/avm2/natives/xml/strings.d.ts +10 -0
- package/dist/avm2/natives/xml/strings.d.ts.map +1 -0
- package/dist/avm2/natives/xml/strings.js +192 -0
- package/dist/avm2/natives/xml/strings.js.map +1 -0
- package/dist/avm2/natives/xml/values.d.ts +48 -0
- package/dist/avm2/natives/xml/values.d.ts.map +1 -0
- package/dist/avm2/natives/xml/values.js +123 -0
- package/dist/avm2/natives/xml/values.js.map +1 -0
- package/dist/avm2/natives/xml/xml.d.ts +5 -0
- package/dist/avm2/natives/xml/xml.d.ts.map +1 -0
- package/dist/avm2/natives/xml/xml.js +646 -0
- package/dist/avm2/natives/xml/xml.js.map +1 -0
- package/dist/avm2/number-strings.d.ts +28 -0
- package/dist/avm2/number-strings.d.ts.map +1 -0
- package/dist/avm2/number-strings.js +111 -0
- package/dist/avm2/number-strings.js.map +1 -0
- package/dist/avm2/numbers.d.ts +12 -0
- package/dist/avm2/numbers.d.ts.map +1 -0
- package/dist/avm2/numbers.js +559 -0
- package/dist/avm2/numbers.js.map +1 -0
- package/dist/avm2/options.d.ts +105 -0
- package/dist/avm2/options.d.ts.map +1 -0
- package/dist/avm2/options.js +17 -0
- package/dist/avm2/options.js.map +1 -0
- package/dist/avm2/player-messages.d.ts +3 -0
- package/dist/avm2/player-messages.d.ts.map +1 -0
- package/dist/avm2/player-messages.js +551 -0
- package/dist/avm2/player-messages.js.map +1 -0
- package/dist/avm2/property-cache.d.ts +61 -0
- package/dist/avm2/property-cache.d.ts.map +1 -0
- package/dist/avm2/property-cache.js +136 -0
- package/dist/avm2/property-cache.js.map +1 -0
- package/dist/avm2/runtime.d.ts +588 -0
- package/dist/avm2/runtime.d.ts.map +1 -0
- package/dist/avm2/runtime.js +2645 -0
- package/dist/avm2/runtime.js.map +1 -0
- package/dist/avm2/traits.d.ts +233 -0
- package/dist/avm2/traits.d.ts.map +1 -0
- package/dist/avm2/traits.js +510 -0
- package/dist/avm2/traits.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/package.json +43 -3
- package/src/avm1/activation.ts +114 -0
- package/src/avm1/case.ts +257 -0
- package/src/avm1/clips.ts +440 -0
- package/src/avm1/control.ts +339 -0
- package/src/avm1/errors.ts +60 -0
- package/src/avm1/functions.ts +271 -0
- package/src/avm1/globals/array.ts +676 -0
- package/src/avm1/globals/broadcaster.ts +185 -0
- package/src/avm1/globals/date.ts +548 -0
- package/src/avm1/globals/global.ts +420 -0
- package/src/avm1/globals/math.ts +152 -0
- package/src/avm1/globals/number.ts +122 -0
- package/src/avm1/globals/string.ts +254 -0
- package/src/avm1/globals/timers.ts +144 -0
- package/src/avm1/host.ts +155 -0
- package/src/avm1/index.ts +69 -0
- package/src/avm1/inheritance.ts +159 -0
- package/src/avm1/numbers.ts +348 -0
- package/src/avm1/objects.ts +1080 -0
- package/src/avm1/operators.ts +229 -0
- package/src/avm1/realm.ts +704 -0
- package/src/avm1/runtime.ts +1291 -0
- package/src/avm1/scope.ts +482 -0
- package/src/avm1/urls.ts +226 -0
- package/src/avm1/values.ts +145 -0
- package/src/avm2/amf-classes.ts +80 -0
- package/src/avm2/amf.ts +913 -0
- package/src/avm2/array-conversion.ts +117 -0
- package/src/avm2/builtin-library.ts +28 -0
- package/src/avm2/cache-fill.ts +124 -0
- package/src/avm2/classes.ts +235 -0
- package/src/avm2/definitions.ts +93 -0
- package/src/avm2/descriptors.ts +137 -0
- package/src/avm2/dictionary-keys.ts +345 -0
- package/src/avm2/domain-memory.ts +95 -0
- package/src/avm2/domain.ts +335 -0
- package/src/avm2/dynamic-properties.ts +209 -0
- package/src/avm2/enumeration.ts +506 -0
- package/src/avm2/errors.ts +54 -0
- package/src/avm2/float-library.ts +66 -0
- package/src/avm2/float.ts +31 -0
- package/src/avm2/hooks.ts +97 -0
- package/src/avm2/index.ts +84 -0
- package/src/avm2/messages.ts +178 -0
- package/src/avm2/method-factories.ts +130 -0
- package/src/avm2/modules.ts +120 -0
- package/src/avm2/names.ts +292 -0
- package/src/avm2/natives/aliases.ts +59 -0
- package/src/avm2/natives/array.ts +482 -0
- package/src/avm2/natives/bytearray.ts +1474 -0
- package/src/avm2/natives/case.ts +98 -0
- package/src/avm2/natives/concurrent.ts +268 -0
- package/src/avm2/natives/date.ts +678 -0
- package/src/avm2/natives/define.ts +176 -0
- package/src/avm2/natives/describe.ts +426 -0
- package/src/avm2/natives/dictionary.ts +18 -0
- package/src/avm2/natives/float-vector.ts +99 -0
- package/src/avm2/natives/float.ts +116 -0
- package/src/avm2/natives/index.ts +70 -0
- package/src/avm2/natives/json.ts +600 -0
- package/src/avm2/natives/number.ts +194 -0
- package/src/avm2/natives/object.ts +272 -0
- package/src/avm2/natives/proxy.ts +98 -0
- package/src/avm2/natives/regexp.ts +580 -0
- package/src/avm2/natives/shell-workers.ts +474 -0
- package/src/avm2/natives/shell.ts +707 -0
- package/src/avm2/natives/sort.ts +438 -0
- package/src/avm2/natives/string.ts +158 -0
- package/src/avm2/natives/sync.ts +964 -0
- package/src/avm2/natives/toplevel.ts +163 -0
- package/src/avm2/natives/vector-elements.ts +61 -0
- package/src/avm2/natives/vector.ts +511 -0
- package/src/avm2/natives/xml/access.ts +767 -0
- package/src/avm2/natives/xml/build.ts +381 -0
- package/src/avm2/natives/xml/chars.ts +127 -0
- package/src/avm2/natives/xml/escape.ts +46 -0
- package/src/avm2/natives/xml/names.ts +256 -0
- package/src/avm2/natives/xml/node.ts +339 -0
- package/src/avm2/natives/xml/operators.ts +90 -0
- package/src/avm2/natives/xml/parser.ts +414 -0
- package/src/avm2/natives/xml/strings.ts +241 -0
- package/src/avm2/natives/xml/values.ts +162 -0
- package/src/avm2/natives/xml/xml.ts +829 -0
- package/src/avm2/number-strings.ts +127 -0
- package/src/avm2/numbers.ts +605 -0
- package/src/avm2/options.ts +125 -0
- package/src/avm2/player-messages.ts +552 -0
- package/src/avm2/property-cache.ts +160 -0
- package/src/avm2/runtime.ts +3274 -0
- package/src/avm2/traits.ts +584 -0
- package/src/index.ts +8 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
// Classes as OP_newclass makes them: a class object and its instances'
|
|
2
|
+
// traits from the module's descriptor, with its hooks, its prototype
|
|
3
|
+
// object and its methods bound to the scope chain it is made in; and the
|
|
4
|
+
// Vector.<T> classes applying Vector to a type makes.
|
|
5
|
+
|
|
6
|
+
import type { Abc, AsObject, ClassDesc, Method, Scope, Value } from "./descriptors.js";
|
|
7
|
+
import { firstDefinition } from "./domain.js";
|
|
8
|
+
import { installMethod } from "./method-factories.js";
|
|
9
|
+
import { formatClassName, type Multiname, NS_Public, qualifiedName } from "./names.js";
|
|
10
|
+
import { invalidate } from "./property-cache.js";
|
|
11
|
+
import type { Runtime } from "./runtime.js";
|
|
12
|
+
import { BIND_Set, boundKey, methodKey, Traits, VALUE_TESTS } from "./traits.js";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* As OP_newclass: a class from its module's descriptor, extending `base`,
|
|
16
|
+
* its methods bound to the scope chain here. Object, Class and Function
|
|
17
|
+
* use the traits the runtime made for them before they existed.
|
|
18
|
+
*/
|
|
19
|
+
export function newClass(
|
|
20
|
+
rt: Runtime,
|
|
21
|
+
desc: ClassDesc,
|
|
22
|
+
base: AsObject | null,
|
|
23
|
+
scope: Scope,
|
|
24
|
+
): AsObject {
|
|
25
|
+
const error = desc.instance.error ?? desc.static.error;
|
|
26
|
+
if (error) {
|
|
27
|
+
throw rt.error("VerifyError", error);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const abc = desc.abc as Abc;
|
|
31
|
+
const name = abc.names[desc.name] as Multiname;
|
|
32
|
+
const qualified = qualifiedName(name);
|
|
33
|
+
// As MethodEnv::newclass: a class with a base needs one (#1009), and
|
|
34
|
+
// one whose traits are the base's it linked to, which avmplus finds as
|
|
35
|
+
// a type (#1108). Compared by definition, as avmplus compares traits: a
|
|
36
|
+
// class made twice is one class. Where the base is the class its name
|
|
37
|
+
// finds by name, but not the one it finds as a type, as for a child's
|
|
38
|
+
// class it found by name after its parent defined the name too,
|
|
39
|
+
// avmshell rejects the class sooner, as corrupt (#1107). Only a class
|
|
40
|
+
// that exists is compared: the check runs no script.
|
|
41
|
+
if (desc.base && (base === null || base === undefined)) {
|
|
42
|
+
throw rt.error("TypeError", 1009);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (rt.children && base) {
|
|
46
|
+
const baseName = abc.names[desc.base] as Multiname;
|
|
47
|
+
const script = rt.findScript(baseName, true);
|
|
48
|
+
const expected = script?.global ? rt.getProperty(script.global, baseName) : undefined;
|
|
49
|
+
if (expected?.$it && expected.$desc !== base.$desc) {
|
|
50
|
+
const byName = rt.findScript(baseName);
|
|
51
|
+
const named = byName?.global ? rt.getProperty(byName.global, baseName) : undefined;
|
|
52
|
+
throw rt.error("VerifyError", named === base ? 1107 : 1108);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// A builtin or a player's class, whose hook and type tests are its own,
|
|
57
|
+
// is the first definition of its name, as avmplus' natives belong to
|
|
58
|
+
// their ABC; a top-level one is public. A class only named as one, as a
|
|
59
|
+
// file's own internal Boolean is, is a class like any other.
|
|
60
|
+
const ns = name.namespaces[0];
|
|
61
|
+
const own =
|
|
62
|
+
(ns?.kind === NS_Public || !!ns?.uri) &&
|
|
63
|
+
firstDefinition(name.domain ?? rt.root, name)?.abc === abc;
|
|
64
|
+
const baseTraits: Traits | null = base ? base.$it : null;
|
|
65
|
+
let itraits: Traits;
|
|
66
|
+
if (own && qualified === "Object") {
|
|
67
|
+
itraits = rt.objectTraits;
|
|
68
|
+
} else if (own && qualified === "Class") {
|
|
69
|
+
itraits = rt.classTraits;
|
|
70
|
+
} else if (own && qualified === "Function") {
|
|
71
|
+
itraits = rt.functionTraits;
|
|
72
|
+
} else {
|
|
73
|
+
itraits = new Traits(qualified, baseTraits);
|
|
74
|
+
itraits.testsValues = own && VALUE_TESTS.has(qualified);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
itraits.describe(desc.instance);
|
|
78
|
+
const hooks = own ? rt.classHooks[qualified] : undefined;
|
|
79
|
+
itraits.hooks = hooks ?? null;
|
|
80
|
+
itraits.dynamic = !desc.sealed;
|
|
81
|
+
itraits.final = desc.final;
|
|
82
|
+
itraits.isInterface = desc.interface;
|
|
83
|
+
itraits.ctor = desc.ctor ?? null;
|
|
84
|
+
itraits.metadata = desc.meta ?? null;
|
|
85
|
+
itraits.refusesNames = !!hooks?.refusesNames;
|
|
86
|
+
// As ClassClosure::checkForRestrictedInheritance.
|
|
87
|
+
itraits.restricted = !!hooks?.restricted;
|
|
88
|
+
itraits.uninstantiable =
|
|
89
|
+
!!baseTraits &&
|
|
90
|
+
(baseTraits.uninstantiable || (baseTraits.restricted && baseTraits.abc !== abc));
|
|
91
|
+
itraits.abc = abc;
|
|
92
|
+
|
|
93
|
+
// A class's allocation, bound to the runtime; its subclasses inherit it.
|
|
94
|
+
const create = hooks?.create;
|
|
95
|
+
if (create) {
|
|
96
|
+
itraits.create = (traits) => create(traits, rt);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (hooks?.properties) {
|
|
100
|
+
itraits.properties = hooks.properties;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (hooks?.getIndex) {
|
|
104
|
+
itraits.getIndex = hooks.getIndex;
|
|
105
|
+
itraits.setIndex = hooks.setIndex;
|
|
106
|
+
itraits.hasIndex = hooks.hasIndex;
|
|
107
|
+
itraits.index = hooks.index;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
for (const i of desc.interfaces) {
|
|
111
|
+
const mn = abc.names[i] as Multiname;
|
|
112
|
+
const iface = rt.resolveName(mn);
|
|
113
|
+
if (iface) {
|
|
114
|
+
itraits.interfaces.add(iface.$it);
|
|
115
|
+
for (const t of iface.$it.interfaces) {
|
|
116
|
+
itraits.interfaces.add(t);
|
|
117
|
+
}
|
|
118
|
+
} else {
|
|
119
|
+
// Its script is the one running, and has not made it yet.
|
|
120
|
+
if (!itraits.pendingInterfaces) {
|
|
121
|
+
itraits.pendingInterfaces = [];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
itraits.pendingInterfaces.push(() => rt.resolveName(mn)?.$it ?? null);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// The class object: Class's instance, with its own statics.
|
|
129
|
+
// Class is dynamic, so its instances are: String.fromCharCode = ... is legal.
|
|
130
|
+
const straits = new Traits(`${qualified}$`, rt.classTraits);
|
|
131
|
+
straits.dynamic = true;
|
|
132
|
+
straits.final = true;
|
|
133
|
+
straits.describe(desc.static);
|
|
134
|
+
const cls = straits.instance();
|
|
135
|
+
cls.$it = itraits;
|
|
136
|
+
cls.$desc = desc;
|
|
137
|
+
cls.$base = base;
|
|
138
|
+
itraits.cls = cls;
|
|
139
|
+
straits.cls = cls;
|
|
140
|
+
|
|
141
|
+
// Its prototype object: an Object whose prototype is the base class's.
|
|
142
|
+
// A class object's own $p comes from Class's instance prototype, which
|
|
143
|
+
// it inherits: class objects made before Class see it once Class exists.
|
|
144
|
+
// Date's, RegExp's and Array's are instances of their own class, as avmplus has them.
|
|
145
|
+
const prototype = hooks?.prototype ? hooks.prototype(rt, cls) : rt.objectTraits.instance();
|
|
146
|
+
prototype.$p = base ? base.$prototype : null;
|
|
147
|
+
cls.$prototype = prototype;
|
|
148
|
+
itraits.proto.$p = prototype;
|
|
149
|
+
prototype.$d.set("constructor", cls);
|
|
150
|
+
prototype.$dontEnum = new Set(["constructor"]);
|
|
151
|
+
|
|
152
|
+
const iscope = rt.scope(scope, [cls], 0);
|
|
153
|
+
for (const [d, factory, id, , params] of desc.static.methods) {
|
|
154
|
+
installMethod(rt, straits.methodHome(3), d, withId(factory(scope, base), id), factory, params);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
for (const [d, factory, id, , params] of desc.instance.methods) {
|
|
158
|
+
installMethod(rt, itraits.methodHome(3), d, withId(factory(iscope, base), id), factory, params);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Playerglobal can declare an accessor whose setter has no ABC body.
|
|
162
|
+
// Install it here so both direct bound calls and dynamic property writes reach it.
|
|
163
|
+
if (hooks?.setOnlySlots) {
|
|
164
|
+
for (const [name, slot] of Object.entries(hooks.setOnlySlots)) {
|
|
165
|
+
const binding = itraits.find(rt.publicName(name));
|
|
166
|
+
const d = (binding >> 3) + 1;
|
|
167
|
+
if ((binding & 7) === BIND_Set && itraits.proto[methodKey(d)] == null) {
|
|
168
|
+
const set = function (this: AsObject, value: Value) {
|
|
169
|
+
this[slot] = value;
|
|
170
|
+
};
|
|
171
|
+
itraits.proto[methodKey(d)] = set;
|
|
172
|
+
itraits.proto[boundKey(d)] = set;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Calls through an interface read one name whatever the class; set
|
|
178
|
+
// here, before any instance exists, so that the prototype keeps its shape.
|
|
179
|
+
const aliases = desc.aliases;
|
|
180
|
+
if (aliases) {
|
|
181
|
+
const proto = itraits.proto;
|
|
182
|
+
for (let i = 0; i < aliases.length; i += 2) {
|
|
183
|
+
itraits.methodHome(1)[aliases[i] as string] = proto[boundKey(aliases[i + 1] as number)];
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Caches keep the methods and what the hooks decide.
|
|
188
|
+
invalidate();
|
|
189
|
+
const init = desc.init(iscope, base);
|
|
190
|
+
itraits.proto.$init = init;
|
|
191
|
+
// Its entry for `new` and `super()` of the class where the compiler
|
|
192
|
+
// coerced the arguments, as for bound calls (installMethod).
|
|
193
|
+
itraits.proto.$binit = (init as Method & { $bound?: Method }).$bound ?? init;
|
|
194
|
+
// A class constructClass only allocates and initializes, which compiled
|
|
195
|
+
// code constructs itself (see the codegen's constructSlot).
|
|
196
|
+
cls.$new = !hooks?.construct && !desc.interface && !itraits.uninstantiable;
|
|
197
|
+
// Its static initializer may name the class as a type, as avmplus
|
|
198
|
+
// resolves from traits, before initproperty has stored it anywhere.
|
|
199
|
+
rt.defining.set(qualified, cls);
|
|
200
|
+
try {
|
|
201
|
+
desc.cinit(scope, base).call(cls);
|
|
202
|
+
} finally {
|
|
203
|
+
rt.defining.delete(qualified);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
hooks?.created?.(rt, cls);
|
|
207
|
+
return cls;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Vector.<T> for a T other than int, uint and Number: Vector$object's
|
|
212
|
+
* class, typed, whose name names T as avmplus does, a builtin Vector as
|
|
213
|
+
* Vector.<int>, and whose superclass is Vector.<*>, Vector$object.
|
|
214
|
+
*/
|
|
215
|
+
export function specializeVector(rt: Runtime, base: AsObject, param: AsObject): AsObject {
|
|
216
|
+
const itraits = new Traits(`__AS3__.vec::Vector.<${formatClassName(param.$it.name)}>`, base.$it);
|
|
217
|
+
itraits.dynamic = base.$it.dynamic;
|
|
218
|
+
itraits.refusesNames = base.$it.refusesNames;
|
|
219
|
+
itraits.hooks = base.$it.hooks;
|
|
220
|
+
const cls = Object.create(Object.getPrototypeOf(base));
|
|
221
|
+
cls.$d = null;
|
|
222
|
+
cls.$it = itraits;
|
|
223
|
+
cls.$desc = base.$desc;
|
|
224
|
+
cls.$base = base;
|
|
225
|
+
cls.$prototype = base.$prototype;
|
|
226
|
+
cls.$param = rt.refOf(param);
|
|
227
|
+
itraits.cls = cls;
|
|
228
|
+
return cls;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/** `f`, a method, with its method id, which a closure of it keeps. */
|
|
232
|
+
export function withId(f: Method, id: number): Method {
|
|
233
|
+
(f as Method & { $id?: number }).$id = id;
|
|
234
|
+
return f;
|
|
235
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// Definitions by qualified name, "pkg::Name" or "Name", as a host and
|
|
2
|
+
// ApplicationDomain look them up: a SWF's SymbolClass, a player's own
|
|
3
|
+
// classes, and getDefinition.
|
|
4
|
+
|
|
5
|
+
import type { Abc, AsObject, Value } from "./descriptors.js";
|
|
6
|
+
import type { Domain } from "./domain.js";
|
|
7
|
+
import { CONSTANT_Qname, Multiname, NS_Public, namespace, publicNs, qname } from "./names.js";
|
|
8
|
+
import type { Runtime } from "./runtime.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The class `qualified` names, "pkg::Name" or "Name", its defining script
|
|
12
|
+
* run; a ReferenceError if no script defines it. What a SWF's SymbolClass
|
|
13
|
+
* and a player's lookups by name go through, at every version.
|
|
14
|
+
*/
|
|
15
|
+
export function classNamed(rt: Runtime, qualified: string, domain: Domain | null): AsObject {
|
|
16
|
+
return classIn(rt, qualified, domain, (domain ?? rt.root).named, null);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The class `qualified` names in `domain` as code finds it, at user code's
|
|
21
|
+
* version, as avmshell's Domain.getClass does: a name of the other series'
|
|
22
|
+
* or the VM's own is a ReferenceError.
|
|
23
|
+
*/
|
|
24
|
+
export function classNamedByCode(rt: Runtime, qualified: string, domain: Domain): AsObject {
|
|
25
|
+
return classIn(rt, qualified, domain, domain.namedByCode, rt.userVersions);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** The class `qualified` names, at `versions` or every version, kept in `named` once found. */
|
|
29
|
+
function classIn(
|
|
30
|
+
rt: Runtime,
|
|
31
|
+
qualified: string,
|
|
32
|
+
domain: Domain | null,
|
|
33
|
+
named: Map<string, AsObject>,
|
|
34
|
+
versions: readonly number[] | null,
|
|
35
|
+
): AsObject {
|
|
36
|
+
const known = named.get(qualified);
|
|
37
|
+
if (known) {
|
|
38
|
+
return known;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const cls = rt.resolveName(qualifiedNameIn(rt, qualified, domain, versions));
|
|
42
|
+
// A script still running its initializer may not have made the class yet.
|
|
43
|
+
if (cls) {
|
|
44
|
+
named.set(qualified, cls);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return cls;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* What `qualified` names in `domain`, as Flash's
|
|
52
|
+
* ApplicationDomain.getDefinition finds it: a name no script defines is
|
|
53
|
+
* refused by its local name, and a script whose initializer threw runs
|
|
54
|
+
* again, its error coming through each time, where a name's lookup by
|
|
55
|
+
* code keeps it as run, as avmplus does. Seen at user code's version, as
|
|
56
|
+
* avmplus' public namespace is the caller's: a name of the other series'
|
|
57
|
+
* or the VM's own is not defined, as it is not to the code itself.
|
|
58
|
+
*/
|
|
59
|
+
export function definitionNamed(rt: Runtime, qualified: string, domain: Domain): Value {
|
|
60
|
+
const mn = qualifiedNameIn(rt, qualified, domain, rt.userVersions);
|
|
61
|
+
const script = rt.findScript(mn);
|
|
62
|
+
if (!script) {
|
|
63
|
+
throw rt.error("ReferenceError", 1065, mn.name);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return rt.getProperty(rt.initScript(script, true), mn);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** The module whose script defines `qualified` for `domain`, or null: by it a player keys what SymbolClass binds. */
|
|
70
|
+
export function definingAbc(rt: Runtime, qualified: string, domain: Domain): Abc | null {
|
|
71
|
+
return rt.findScript(qualifiedNameIn(rt, qualified, domain, null))?.abc ?? null;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The public name "pkg::Name" or "Name" stands for, looked up in `domain`:
|
|
76
|
+
* at `versions`, user code's as code finds a name, or with null at every
|
|
77
|
+
* version, as the host reaches names.
|
|
78
|
+
*/
|
|
79
|
+
function qualifiedNameIn(
|
|
80
|
+
rt: Runtime,
|
|
81
|
+
qualified: string,
|
|
82
|
+
domain: Domain | null,
|
|
83
|
+
versions: readonly number[] | null,
|
|
84
|
+
): Multiname {
|
|
85
|
+
const i = qualified.lastIndexOf("::");
|
|
86
|
+
const ns = i < 0 ? publicNs : namespace(NS_Public, qualified.slice(0, i));
|
|
87
|
+
const local = i < 0 ? qualified : qualified.slice(i + 2);
|
|
88
|
+
const mn = versions
|
|
89
|
+
? new Multiname(CONSTANT_Qname, [ns], versions, local, false)
|
|
90
|
+
: qname(ns, local);
|
|
91
|
+
mn.domain = domain === rt.root ? null : domain;
|
|
92
|
+
return mn;
|
|
93
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// What a compiled module is built against: the values it handles, and the
|
|
2
|
+
// descriptors of its traits, classes and scripts it gives the runtime
|
|
3
|
+
// (docs/architecture/compiler.md, "Modules and the bootstrap").
|
|
4
|
+
|
|
5
|
+
import type { Domain, Script } from "./domain.js";
|
|
6
|
+
import type { Multiname, Namespace, TypeName } from "./names.js";
|
|
7
|
+
import type { ClassRef, VectorRef } from "./traits.js";
|
|
8
|
+
|
|
9
|
+
// biome-ignore lint/suspicious/noExplicitAny: AS3 values are untyped
|
|
10
|
+
export type Value = any;
|
|
11
|
+
// biome-ignore lint/suspicious/noExplicitAny: AS3 objects are untyped
|
|
12
|
+
export type AsObject = any;
|
|
13
|
+
// biome-ignore lint/complexity/noBannedTypes: methods take their receiver as this
|
|
14
|
+
export type Method = Function;
|
|
15
|
+
|
|
16
|
+
/** Not a property: distinct from undefined, which a property can hold. */
|
|
17
|
+
export const NOT_FOUND = Symbol("not found");
|
|
18
|
+
|
|
19
|
+
/** A scope chain: its objects, outermost first, and a bit per with scope in w. */
|
|
20
|
+
export type Scope = Value[] & { w: number };
|
|
21
|
+
|
|
22
|
+
/** A method factory: the method's function, once its scope chain is known. */
|
|
23
|
+
export type Factory = (scope: Scope, sup: AsObject | null) => Method;
|
|
24
|
+
|
|
25
|
+
/** A reference to a type: null for *, a builtin's name, or a class by name. */
|
|
26
|
+
export type TypeRef = null | string | ClassRef | VectorRef;
|
|
27
|
+
|
|
28
|
+
/** A metadata entry as the ABC has it: its name, and its keys and values alternating, a key "" where it has none. */
|
|
29
|
+
export type Metadata = [string, string[]];
|
|
30
|
+
|
|
31
|
+
/** A method's signature: its return type, its parameter types, and how many of them are required. */
|
|
32
|
+
export type Signature = [TypeRef, TypeRef[], number];
|
|
33
|
+
|
|
34
|
+
export interface TraitsDesc {
|
|
35
|
+
/** The VerifyError resolving the traits gave, if they did not resolve. */
|
|
36
|
+
error?: number;
|
|
37
|
+
slots: number;
|
|
38
|
+
defaults: [number, Value, TypeRef][];
|
|
39
|
+
bindings: [Namespace, number, string, number][];
|
|
40
|
+
/** Each by dispatch id: its factory, its method id in its ABC, and its signature. */
|
|
41
|
+
methods: [number, Factory, number, TypeRef, TypeRef[], number][];
|
|
42
|
+
/**
|
|
43
|
+
* Its own traits' metadata: the trait's kind as the ABC has it, its slot
|
|
44
|
+
* id for a slot, its dispatch id for a method or an accessor pair (the
|
|
45
|
+
* setter's one past the getter's), and the entries.
|
|
46
|
+
*/
|
|
47
|
+
meta?: [number, number, Metadata[]][];
|
|
48
|
+
/**
|
|
49
|
+
* What sets a new object's slots, the base's included, by name, highest
|
|
50
|
+
* first, when it has any: constants it writes itself, any other initial
|
|
51
|
+
* value from `values`, by slot.
|
|
52
|
+
*/
|
|
53
|
+
fill?: SlotFill;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Sets the slots of a new object `o`; `values` holds their initial values by slot. */
|
|
57
|
+
export type SlotFill = (o: AsObject, values: Value[]) => void;
|
|
58
|
+
|
|
59
|
+
export interface ClassDesc {
|
|
60
|
+
name: number;
|
|
61
|
+
base: number;
|
|
62
|
+
interfaces: number[];
|
|
63
|
+
final: boolean;
|
|
64
|
+
interface: boolean;
|
|
65
|
+
sealed: boolean;
|
|
66
|
+
protectedNs: number;
|
|
67
|
+
instance: TraitsDesc;
|
|
68
|
+
static: TraitsDesc;
|
|
69
|
+
init: Factory;
|
|
70
|
+
cinit: Factory;
|
|
71
|
+
/** The constructor's parameter types and how many are required, when it has any. */
|
|
72
|
+
ctor?: [TypeRef[], number];
|
|
73
|
+
/** The class's own metadata, from the trait that defines it. */
|
|
74
|
+
meta?: Metadata[];
|
|
75
|
+
/**
|
|
76
|
+
* For each method of its interfaces that it does not inherit an alias
|
|
77
|
+
* of, the name calls through the interface use and the dispatch id of
|
|
78
|
+
* the class's method, flat: the prototype's alias of its entry for
|
|
79
|
+
* bound calls (newClass).
|
|
80
|
+
*/
|
|
81
|
+
aliases?: (string | number)[];
|
|
82
|
+
/** The module, set when it loads. */
|
|
83
|
+
abc?: Abc;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export interface ScriptDesc {
|
|
87
|
+
traits: TraitsDesc;
|
|
88
|
+
init: Factory;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export interface AbcDesc {
|
|
92
|
+
/** The hash of the module's ABC, and of the ABCs loaded before it, in order, that it was compiled against. */
|
|
93
|
+
hash: string;
|
|
94
|
+
linked: string[];
|
|
95
|
+
names: (Multiname | TypeName | null)[];
|
|
96
|
+
classes: ClassDesc[];
|
|
97
|
+
scripts: ScriptDesc[];
|
|
98
|
+
activations: (TraitsDesc | null)[];
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** A loaded module: what `rt.abc` returns, and methods reach as A. */
|
|
102
|
+
export interface Abc extends AbcDesc {
|
|
103
|
+
scriptStates: Script[];
|
|
104
|
+
/** The domain it was loaded into, and its position among the ABCs loaded there. */
|
|
105
|
+
domain: Domain;
|
|
106
|
+
index: number;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* What an ABC loaded into a domain compiles in: what the compiler needs to
|
|
111
|
+
* bind its names as the runtime will find them (see RuntimeOptions.compileAbc).
|
|
112
|
+
*/
|
|
113
|
+
export interface CompileUnit {
|
|
114
|
+
/** The hashes of the ABCs it is compiled after, its domain's chain, as its module names them. */
|
|
115
|
+
linked: string[];
|
|
116
|
+
/** Its domain and the domain's ancestors, by number, from the domain up to the root, 0. */
|
|
117
|
+
domains: number[];
|
|
118
|
+
/**
|
|
119
|
+
* What the domain finds, by name or as a type, that is not the first
|
|
120
|
+
* definition from the root down, as its caches hold it.
|
|
121
|
+
*/
|
|
122
|
+
found: FoundDefinition[];
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** A definition a domain finds (see CompileUnit.found). */
|
|
126
|
+
export interface FoundDefinition {
|
|
127
|
+
/** The name's namespace, by kind (NS_Public...) and URI, and the name. */
|
|
128
|
+
nsKind: number;
|
|
129
|
+
uri: string;
|
|
130
|
+
name: string;
|
|
131
|
+
/** The ABC that defines it: its domain's number, its position among the ABCs loaded there, and its hash. */
|
|
132
|
+
domain: number;
|
|
133
|
+
index: number;
|
|
134
|
+
hash: string;
|
|
135
|
+
/** Found as a type, as avmplus finds traits, else by name, as it finds scripts. */
|
|
136
|
+
asType: boolean;
|
|
137
|
+
}
|