@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,159 @@
|
|
|
1
|
+
// AS2's classes as the compiler writes them: Extends, InstanceOf, CastOp
|
|
2
|
+
// and ImplementsOp, as Ruffle's (https://github.com/ruffle-rs/ruffle)
|
|
3
|
+
// core/src/avm1/activation.rs and object.rs (is_instance_of) have them:
|
|
4
|
+
// MIT OR Apache-2.0, Copyright (c) 2018-2022 Ruffle LLC and Ruffle
|
|
5
|
+
// contributors. Where adl parts from Ruffle, adl decides (docs/avm1.md,
|
|
6
|
+
// "Classes").
|
|
7
|
+
|
|
8
|
+
import type { Activation } from "./activation.js";
|
|
9
|
+
import { Avm1Object, DONT_ENUM, get, set, VERSION_6 } from "./objects.js";
|
|
10
|
+
import type { Realm } from "./realm.js";
|
|
11
|
+
import { isPrimitive, toNumber, type Value } from "./values.js";
|
|
12
|
+
|
|
13
|
+
/** What Flash's log says of a primitive where an action takes an object. */
|
|
14
|
+
export const PRIMITIVE =
|
|
15
|
+
"Parameters of primitive types are no longer coerced into the required type - Object.";
|
|
16
|
+
/** And of an object where it takes a number. */
|
|
17
|
+
const OBJECT =
|
|
18
|
+
"Parameters of type Object are no longer coerced into the required primitive type - number.";
|
|
19
|
+
|
|
20
|
+
/** A primitive where an object is taken: undefined and null say nothing, any other writes to the log. */
|
|
21
|
+
function refuse(cx: Activation, value: Value): void {
|
|
22
|
+
if (value !== undefined && value !== null) {
|
|
23
|
+
cx.host.trace(PRIMITIVE);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** The deepest a prototype chain is walked, as objects.ts walks one. */
|
|
28
|
+
const DEPTH = 255;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A class's or an interface's `prototype` as InstanceOf and ImplementsOp
|
|
32
|
+
* read it: its own stored value, no getter called, nothing inherited.
|
|
33
|
+
*/
|
|
34
|
+
function prototypeOf(o: Avm1Object, version: number): Value {
|
|
35
|
+
return o.own("prototype", version)?.value;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Whether `value` is an instance of `constr`: its `prototype` on the
|
|
40
|
+
* object's chain, or among the interfaces of one there, and theirs. A
|
|
41
|
+
* primitive class, or prototype, is boxed, by `_global`'s class.
|
|
42
|
+
*/
|
|
43
|
+
export function instanceOf(realm: Realm, value: Value, constr: Value, version: number): boolean {
|
|
44
|
+
if (!(value instanceof Avm1Object) || constr === undefined || constr === null) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
let prototype = prototypeOf(realm.box(constr, version), version);
|
|
49
|
+
if (isPrimitive(prototype) && prototype !== undefined && prototype !== null) {
|
|
50
|
+
prototype = realm.box(prototype, version);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (!(prototype instanceof Avm1Object)) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
let p = value.protoFor(version);
|
|
58
|
+
for (let depth = 0; p instanceof Avm1Object && depth < DEPTH; depth++) {
|
|
59
|
+
if (p === prototype) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (p.interfaces !== null && implementsOf(p.interfaces, prototype, 0)) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
p = p.protoFor(version);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Whether `prototype` is among `interfaces`, or theirs. */
|
|
74
|
+
function implementsOf(interfaces: Avm1Object[], prototype: Avm1Object, depth: number): boolean {
|
|
75
|
+
for (const i of interfaces) {
|
|
76
|
+
if (i === prototype) {
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (
|
|
81
|
+
i.interfaces !== null &&
|
|
82
|
+
depth < DEPTH &&
|
|
83
|
+
implementsOf(i.interfaces, prototype, depth + 1)
|
|
84
|
+
) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Extends: the subclass's `prototype` a new object whose prototype is the
|
|
94
|
+
* superclass's, which knows its `__constructor__` but has no `constructor`
|
|
95
|
+
* of its own (adl; Ruffle gives it one). A primitive on either side
|
|
96
|
+
* changes nothing (adl).
|
|
97
|
+
*/
|
|
98
|
+
export function extend(cx: Activation, superclass: Value, subclass: Value, version: number): void {
|
|
99
|
+
if (!(superclass instanceof Avm1Object)) {
|
|
100
|
+
refuse(cx, superclass);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (!(subclass instanceof Avm1Object)) {
|
|
105
|
+
refuse(cx, subclass);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// `__constructor__` is hidden from a SWF 5 (adl).
|
|
110
|
+
const prototype = new Avm1Object(get(superclass, "prototype", version));
|
|
111
|
+
prototype.define("__constructor__", superclass, DONT_ENUM | VERSION_6);
|
|
112
|
+
set(subclass, "prototype", prototype, version);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* ImplementsOp: the constructor, the interfaces' count and the interfaces
|
|
117
|
+
* popped, the interfaces' prototypes given to the constructor's: only the
|
|
118
|
+
* first time, as adl has it (Ruffle replaces them), and from SWF 6 too.
|
|
119
|
+
*/
|
|
120
|
+
export function implementsOp(cx: Activation, version: number): void {
|
|
121
|
+
const st = cx.st;
|
|
122
|
+
const constr = st.pop();
|
|
123
|
+
if (!(constr instanceof Avm1Object)) {
|
|
124
|
+
refuse(cx, constr);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const countValue = st.pop();
|
|
128
|
+
let count = 0;
|
|
129
|
+
if (isPrimitive(countValue)) {
|
|
130
|
+
count = toNumber(countValue, version) | 0;
|
|
131
|
+
} else {
|
|
132
|
+
cx.host.trace(OBJECT);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
count = Math.min(count, st.length);
|
|
136
|
+
if (count <= 0) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const interfaces: Avm1Object[] = [];
|
|
141
|
+
for (let k = 0; k < count; k++) {
|
|
142
|
+
const i = st.pop();
|
|
143
|
+
if (i instanceof Avm1Object) {
|
|
144
|
+
const p = prototypeOf(i, version);
|
|
145
|
+
if (p instanceof Avm1Object) {
|
|
146
|
+
interfaces.push(p);
|
|
147
|
+
}
|
|
148
|
+
} else {
|
|
149
|
+
refuse(cx, i);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (constr instanceof Avm1Object) {
|
|
154
|
+
const prototype = prototypeOf(constr, version);
|
|
155
|
+
if (prototype instanceof Avm1Object && prototype.interfaces === null) {
|
|
156
|
+
prototype.interfaces = interfaces;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
// AVM1's numbers as strings and strings as numbers, apart from AS3's: the
|
|
2
|
+
// algorithms of Ruffle's (https://github.com/ruffle-rs/ruffle)
|
|
3
|
+
// core/src/avm1/value.rs (f64_to_string, decimal_shift, parse_float_impl,
|
|
4
|
+
// guess_radix, string_to_f64), translated, with its bugs, which are Flash
|
|
5
|
+
// Player's: MIT OR Apache-2.0, Copyright (c) 2018-2022 Ruffle LLC and Ruffle
|
|
6
|
+
// contributors.
|
|
7
|
+
|
|
8
|
+
const bits = new DataView(new ArrayBuffer(8));
|
|
9
|
+
|
|
10
|
+
/** The base-2 exponent of a positive double, unbiased; that of 2^-1023 for a subnormal. */
|
|
11
|
+
function exponentOf(n: number): number {
|
|
12
|
+
bits.setFloat64(0, n);
|
|
13
|
+
return ((bits.getUint32(0) >>> 20) & 0x7ff) - 1023;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** `value` times 10^`exp`, by squaring, multiplying or dividing as Flash does. */
|
|
17
|
+
function decimalShift(value: number, exp: number): number {
|
|
18
|
+
let base = 10;
|
|
19
|
+
let rest = Math.abs(exp);
|
|
20
|
+
while (rest > 0) {
|
|
21
|
+
if (rest & 1) {
|
|
22
|
+
value = exp > 0 ? value * base : value / base;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
rest = Math.floor(rest / 2);
|
|
26
|
+
base *= base;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Rust's f64::round: halves away from zero. */
|
|
33
|
+
function roundAway(n: number): number {
|
|
34
|
+
return n < 0 ? -Math.round(-n) : Math.round(n);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const ZERO = 0x30;
|
|
38
|
+
const NINE = 0x39;
|
|
39
|
+
const DOT = 0x2e;
|
|
40
|
+
const MAX_DECIMAL_PLACES = 15;
|
|
41
|
+
/** log10(2), as Flash has it: less precise than Math.LOG10E's. */
|
|
42
|
+
const LOG10_2 = 0.301029995663981;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* A number as AVM1 writes it: integers as they are, others to 15
|
|
46
|
+
* significant digits, rounded half away from zero, with an exponent from
|
|
47
|
+
* 1e15 up and below 1e-5. Flash's rounding carries badly from 9.99... to
|
|
48
|
+
* 10 for negative numbers, so -9999999999999996 is "-e+16", as in Flash.
|
|
49
|
+
*/
|
|
50
|
+
export function numberToString(n: number): string {
|
|
51
|
+
if (Number.isNaN(n)) {
|
|
52
|
+
return "NaN";
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (n === Number.POSITIVE_INFINITY) {
|
|
56
|
+
return "Infinity";
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (n === Number.NEGATIVE_INFINITY) {
|
|
60
|
+
return "-Infinity";
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (n === 0) {
|
|
64
|
+
return "0";
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (n >= -2147483648 && n <= 2147483647 && Number.isInteger(n)) {
|
|
68
|
+
return String(n);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const buf: number[] = [];
|
|
72
|
+
const negative = n < 0;
|
|
73
|
+
if (negative) {
|
|
74
|
+
n = -n;
|
|
75
|
+
buf.push(0x2d);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
let exp2 = exponentOf(n);
|
|
79
|
+
if (exp2 === -1023) {
|
|
80
|
+
// A subnormal: scaled by 2^54 into the normal range for its exponent.
|
|
81
|
+
exp2 = exponentOf(n * 1.801439850948198e16) - 54;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
let exp = roundAway(exp2 * LOG10_2);
|
|
85
|
+
// In [0, 10), the exponent's estimate being off by one at most.
|
|
86
|
+
let mantissa = decimalShift(n, -exp);
|
|
87
|
+
if (Math.trunc(mantissa) === 0) {
|
|
88
|
+
exp--;
|
|
89
|
+
mantissa = decimalShift(n, -exp);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (Math.trunc(mantissa) >= 10) {
|
|
93
|
+
exp++;
|
|
94
|
+
mantissa = decimalShift(n, -exp);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const digit = (): number => {
|
|
98
|
+
const d = Math.trunc(mantissa);
|
|
99
|
+
mantissa = (mantissa - d) * 10;
|
|
100
|
+
return ZERO + d;
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
if (exp >= 15) {
|
|
104
|
+
// 1.2345e+15, without a place for a carry out of the first digit.
|
|
105
|
+
buf.push(digit(), DOT);
|
|
106
|
+
for (let i = 0; i < MAX_DECIMAL_PLACES - 1; i++) {
|
|
107
|
+
buf.push(digit());
|
|
108
|
+
}
|
|
109
|
+
} else if (exp >= 0) {
|
|
110
|
+
// 12345.678901234, after a 0 for a carry.
|
|
111
|
+
buf.push(ZERO);
|
|
112
|
+
for (let i = 0; i <= exp; i++) {
|
|
113
|
+
buf.push(digit());
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
buf.push(DOT);
|
|
117
|
+
for (let i = 0; i < MAX_DECIMAL_PLACES - exp - 1; i++) {
|
|
118
|
+
buf.push(digit());
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
exp = 0;
|
|
122
|
+
} else if (exp >= -5) {
|
|
123
|
+
// 0.0012345678901234
|
|
124
|
+
buf.push(ZERO, ZERO, DOT);
|
|
125
|
+
for (let i = 0; i < -exp - 1; i++) {
|
|
126
|
+
buf.push(ZERO);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
for (let i = 0; i < MAX_DECIMAL_PLACES; i++) {
|
|
130
|
+
buf.push(digit());
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
exp = 0;
|
|
134
|
+
} else {
|
|
135
|
+
// 1.2345e-15, after a 0 for a carry.
|
|
136
|
+
buf.push(ZERO, digit(), DOT);
|
|
137
|
+
for (let i = 0; i < MAX_DECIMAL_PLACES - 1; i++) {
|
|
138
|
+
buf.push(digit());
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// The next digit rounds, half away from zero, carrying through 9s; the
|
|
143
|
+
// sign and the point are passed over, and a carry out of the first digit is lost.
|
|
144
|
+
if (digit() >= ZERO + 5) {
|
|
145
|
+
for (let i = buf.length - 1; i >= 0; i--) {
|
|
146
|
+
if (buf[i] === NINE) {
|
|
147
|
+
buf[i] = ZERO;
|
|
148
|
+
} else if (buf[i] >= ZERO) {
|
|
149
|
+
buf[i]++;
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
while (buf.length > 0 && buf[buf.length - 1] === ZERO) {
|
|
156
|
+
buf.pop();
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (buf.length > 0 && buf[buf.length - 1] === DOT) {
|
|
160
|
+
buf.pop();
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
let start = 0;
|
|
164
|
+
if (exp !== 0) {
|
|
165
|
+
// Flash's repairs of the carry, which miss a negative number's.
|
|
166
|
+
let lead = 0;
|
|
167
|
+
while (lead < buf.length && buf[lead] === ZERO) {
|
|
168
|
+
lead++;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
buf.splice(0, lead);
|
|
172
|
+
if (buf.length === 0) {
|
|
173
|
+
buf.push(ZERO + 1);
|
|
174
|
+
exp++;
|
|
175
|
+
} else {
|
|
176
|
+
let last = buf.length - 1;
|
|
177
|
+
while (last > 0 && buf[last] === ZERO) {
|
|
178
|
+
last--;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (last === 0) {
|
|
182
|
+
exp += buf.length - 1;
|
|
183
|
+
buf.length = 1;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// A leading 0 goes, but before the point.
|
|
189
|
+
const i = negative ? 1 : 0;
|
|
190
|
+
if (buf[i] === ZERO && buf[i + 1] !== DOT) {
|
|
191
|
+
if (i > 0) {
|
|
192
|
+
buf[i] = buf[i - 1];
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
start = 1;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const text = String.fromCharCode(...buf.slice(start));
|
|
199
|
+
return exp === 0 ? text : `${text}e${exp > 0 ? "+" : "-"}${Math.abs(exp)}`;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/** Flash's whitespace before a number: space, tab, line feed and carriage return. */
|
|
203
|
+
function isSpace(c: number): boolean {
|
|
204
|
+
return c === 0x20 || c === 0x09 || c === 0x0a || c === 0x0d;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function isDigit(c: number): boolean {
|
|
208
|
+
return c >= ZERO && c <= NINE;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* A decimal number, after spaces: digits, a point, more digits and an
|
|
213
|
+
* exponent, summed digit by digit as Flash sums them. NaN without a digit,
|
|
214
|
+
* and, `strict`, with anything after the number.
|
|
215
|
+
*/
|
|
216
|
+
export function parseFloatAvm1(s: string, strict: boolean): number {
|
|
217
|
+
let i = 0;
|
|
218
|
+
while (i < s.length && isSpace(s.charCodeAt(i))) {
|
|
219
|
+
i++;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
let negative = false;
|
|
223
|
+
if (s[i] === "-" || s[i] === "+") {
|
|
224
|
+
negative = s[i] === "-";
|
|
225
|
+
i++;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
const afterSign = i;
|
|
229
|
+
while (i < s.length && isDigit(s.charCodeAt(i))) {
|
|
230
|
+
i++;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
let exp = i - afterSign - 1;
|
|
234
|
+
let digits = i - afterSign;
|
|
235
|
+
if (s[i] === ".") {
|
|
236
|
+
i++;
|
|
237
|
+
const afterDot = i;
|
|
238
|
+
while (i < s.length && isDigit(s.charCodeAt(i))) {
|
|
239
|
+
i++;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
digits += i - afterDot;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Ruffle takes "." for 0; adl, as without any digit, for NaN.
|
|
246
|
+
if (digits === 0) {
|
|
247
|
+
return Number.NaN;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
if (s[i] === "e" || s[i] === "E") {
|
|
251
|
+
i++;
|
|
252
|
+
let negativeExponent = false;
|
|
253
|
+
if (s[i] === "-" || s[i] === "+") {
|
|
254
|
+
negativeExponent = s[i] === "-";
|
|
255
|
+
i++;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
let exponent = 0;
|
|
259
|
+
while (i < s.length && isDigit(s.charCodeAt(i))) {
|
|
260
|
+
exponent = (Math.imul(exponent, 10) + (s.charCodeAt(i) - ZERO)) | 0;
|
|
261
|
+
i++;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
exp = (exp + (negativeExponent ? -exponent : exponent)) | 0;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
if (strict && i < s.length) {
|
|
268
|
+
return Number.NaN;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
let result = 0;
|
|
272
|
+
for (let k = afterSign; k < s.length; k++) {
|
|
273
|
+
const c = s.charCodeAt(k);
|
|
274
|
+
if (isDigit(c)) {
|
|
275
|
+
result += decimalShift(c - ZERO, exp);
|
|
276
|
+
exp = (exp - 1) | 0;
|
|
277
|
+
} else if (c !== DOT) {
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
return negative ? -result : result;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/** 16 after a "0x" or "0X", 8 for a 0 and octal digits only, else 10; a sign before is passed over. */
|
|
286
|
+
function guessRadix(s: string): number {
|
|
287
|
+
const t = s[0] === "+" || s[0] === "-" ? s.slice(1) : s;
|
|
288
|
+
if (t[0] !== "0") {
|
|
289
|
+
return 10;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
if (t[1] === "x" || t[1] === "X") {
|
|
293
|
+
return 16;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
for (let i = 1; i < t.length; i++) {
|
|
297
|
+
const c = t.charCodeAt(i);
|
|
298
|
+
if (c < ZERO || c > 0x37) {
|
|
299
|
+
return 10;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
return 8;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/** An integer in `radix`, signed, wrapping to 32 bits; NaN at any other character or none. */
|
|
307
|
+
function parseWrapping(s: string, radix: number): number {
|
|
308
|
+
let i = 0;
|
|
309
|
+
const negative = s[0] === "-";
|
|
310
|
+
if (negative || s[0] === "+") {
|
|
311
|
+
i = 1;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
if (i >= s.length) {
|
|
315
|
+
return Number.NaN;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
let n = 0;
|
|
319
|
+
for (; i < s.length; i++) {
|
|
320
|
+
const d = Number.parseInt(s[i], radix);
|
|
321
|
+
if (Number.isNaN(d)) {
|
|
322
|
+
return Number.NaN;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
n = (Math.imul(n, radix) + (negative ? -d : d)) | 0;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
return n;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* A string as a number, by the version of the SWF whose code converts it:
|
|
333
|
+
* from SWF 6 hex ("0x1F") and octal ("017") are integers, a sign before
|
|
334
|
+
* "0x" making NaN, as in Flash; up to SWF 4 what is not a number is 0, and
|
|
335
|
+
* trailing characters are let be.
|
|
336
|
+
*/
|
|
337
|
+
export function stringToNumber(s: string, version: number): number {
|
|
338
|
+
if (version >= 6) {
|
|
339
|
+
const radix = guessRadix(s);
|
|
340
|
+
if (radix !== 10) {
|
|
341
|
+
return parseWrapping(radix === 16 ? s.slice(2) : s, radix);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
const strict = version >= 5;
|
|
346
|
+
const result = parseFloatAvm1(s, strict);
|
|
347
|
+
return !strict && Number.isNaN(result) ? 0 : result;
|
|
348
|
+
}
|