@swf2es/player-hosts 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 +759 -0
- package/README.md +43 -2
- package/dist/indexeddb.d.ts +27 -0
- package/dist/indexeddb.d.ts.map +1 -0
- package/dist/indexeddb.js +170 -0
- package/dist/indexeddb.js.map +1 -0
- package/dist/node-worker.d.ts +2 -0
- package/dist/node-worker.d.ts.map +1 -0
- package/dist/node-worker.js +12 -0
- package/dist/node-worker.js.map +1 -0
- package/dist/node.d.ts +8 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +43 -0
- package/dist/node.js.map +1 -0
- package/dist/precompiled.d.ts +31 -0
- package/dist/precompiled.d.ts.map +1 -0
- package/dist/precompiled.js +125 -0
- package/dist/precompiled.js.map +1 -0
- package/dist/stage3d.d.ts +13 -0
- package/dist/stage3d.d.ts.map +1 -0
- package/dist/stage3d.js +61 -0
- package/dist/stage3d.js.map +1 -0
- package/dist/thread/codegen/codegen.js +308 -0
- package/dist/thread/codegen/index.js +405 -0
- package/dist/thread/format/abc-names.js +126 -0
- package/dist/thread/format/actions.js +222 -0
- package/dist/thread/format/air-descriptor.js +63 -0
- package/dist/thread/format/api-versions.js +22 -0
- package/dist/thread/format/bitmap.js +199 -0
- package/dist/thread/format/button.js +60 -0
- package/dist/thread/format/compression.js +200 -0
- package/dist/thread/format/display.js +305 -0
- package/dist/thread/format/filters.js +136 -0
- package/dist/thread/format/font.js +168 -0
- package/dist/thread/format/index.js +26 -0
- package/dist/thread/format/pbj.js +484 -0
- package/dist/thread/format/shape.js +411 -0
- package/dist/thread/format/sound.js +91 -0
- package/dist/thread/format/swf.js +163 -0
- package/dist/thread/format/tags.js +58 -0
- package/dist/thread/format/text.js +135 -0
- package/dist/thread/format/zip.js +91 -0
- package/dist/thread/native/audio/binary.js +3 -0
- package/dist/thread/native/audio/index.js +72 -0
- package/dist/thread/native/base64.js +9 -0
- package/dist/thread/native/compress/binary.js +3 -0
- package/dist/thread/native/compress/index.js +145 -0
- package/dist/thread/native/instance.js +49 -0
- package/dist/thread/native/mp3/binary.js +3 -0
- package/dist/thread/native/mp3/index.js +48 -0
- package/dist/thread/native/render/binary.js +3 -0
- package/dist/thread/native/render/bitmap-kernel.js +591 -0
- package/dist/thread/native/render/draw-kernel.js +204 -0
- package/dist/thread/native/render/dxt-encoder.js +94 -0
- package/dist/thread/native/render/index.js +10 -0
- package/dist/thread/native/render/lines.js +122 -0
- package/dist/thread/native/render/module.js +26 -0
- package/dist/thread/native/render/pixel-ops.js +235 -0
- package/dist/thread/native/render/tessellator.js +250 -0
- package/dist/thread/player/avm1/amf.js +507 -0
- package/dist/thread/player/avm1/avm1.js +1304 -0
- package/dist/thread/player/avm1/bindings.js +214 -0
- package/dist/thread/player/avm1/classes.js +75 -0
- package/dist/thread/player/avm1/clips.js +229 -0
- package/dist/thread/player/avm1/compile.js +140 -0
- package/dist/thread/player/avm1/external.js +79 -0
- package/dist/thread/player/avm1/focus.js +278 -0
- package/dist/thread/player/avm1/globals/BitmapData.js +542 -0
- package/dist/thread/player/avm1/globals/Button.js +31 -0
- package/dist/thread/player/avm1/globals/Color.js +115 -0
- package/dist/thread/player/avm1/globals/ExternalInterface.js +310 -0
- package/dist/thread/player/avm1/globals/FileReference.js +217 -0
- package/dist/thread/player/avm1/globals/Key.js +60 -0
- package/dist/thread/player/avm1/globals/LoadVars.js +208 -0
- package/dist/thread/player/avm1/globals/LocalConnection.js +92 -0
- package/dist/thread/player/avm1/globals/MovieClip.js +1070 -0
- package/dist/thread/player/avm1/globals/MovieClipLoader.js +90 -0
- package/dist/thread/player/avm1/globals/NetConnection.js +261 -0
- package/dist/thread/player/avm1/globals/PrintJob.js +37 -0
- package/dist/thread/player/avm1/globals/Selection.js +62 -0
- package/dist/thread/player/avm1/globals/SharedObject.js +245 -0
- package/dist/thread/player/avm1/globals/Sound.js +238 -0
- package/dist/thread/player/avm1/globals/Stage.js +12 -0
- package/dist/thread/player/avm1/globals/StyleSheet.js +205 -0
- package/dist/thread/player/avm1/globals/TextField.js +396 -0
- package/dist/thread/player/avm1/globals/TextFormat.js +194 -0
- package/dist/thread/player/avm1/globals/TextSnapshot.js +88 -0
- package/dist/thread/player/avm1/globals/XML.js +396 -0
- package/dist/thread/player/avm1/globals/XMLNode.js +413 -0
- package/dist/thread/player/avm1/globals/XMLSocket.js +205 -0
- package/dist/thread/player/avm1/globals/drawing.js +202 -0
- package/dist/thread/player/avm1/globals/filters.js +635 -0
- package/dist/thread/player/avm1/globals/geom.js +600 -0
- package/dist/thread/player/avm1/input.js +483 -0
- package/dist/thread/player/avm1/keyboard.js +113 -0
- package/dist/thread/player/avm1/loads.js +352 -0
- package/dist/thread/player/avm1/net.js +219 -0
- package/dist/thread/player/avm1/paths.js +104 -0
- package/dist/thread/player/avm1/pointer.js +512 -0
- package/dist/thread/player/avm1/queue.js +303 -0
- package/dist/thread/player/avm1/sound.js +106 -0
- package/dist/thread/player/avm1/swf.js +141 -0
- package/dist/thread/player/avm1/timers.js +113 -0
- package/dist/thread/player/bitmap/bitmap.js +627 -0
- package/dist/thread/player/bitmap/draw.js +68 -0
- package/dist/thread/player/bitmap/dxt.js +11 -0
- package/dist/thread/player/bitmap/filters.js +656 -0
- package/dist/thread/player/bitmap/images.js +240 -0
- package/dist/thread/player/bitmap/kernel.js +65 -0
- package/dist/thread/player/bitmap/ops.js +1239 -0
- package/dist/thread/player/bitmap/pixel-bender.js +911 -0
- package/dist/thread/player/bitmap/png.js +139 -0
- package/dist/thread/player/bitmap/turbulence.js +89 -0
- package/dist/thread/player/clock.js +182 -0
- package/dist/thread/player/display/bitmapobject.js +25 -0
- package/dist/thread/player/display/bounds.js +520 -0
- package/dist/thread/player/display/buttonobject.js +305 -0
- package/dist/thread/player/display/color.js +40 -0
- package/dist/thread/player/display/container.js +150 -0
- package/dist/thread/player/display/display.js +14 -0
- package/dist/thread/player/display/displayobject.js +664 -0
- package/dist/thread/player/display/drawing.js +613 -0
- package/dist/thread/player/display/filters.js +285 -0
- package/dist/thread/player/display/geometry.js +189 -0
- package/dist/thread/player/display/gradients.js +117 -0
- package/dist/thread/player/display/graphicsdata.js +592 -0
- package/dist/thread/player/display/instantiate.js +71 -0
- package/dist/thread/player/display/matrix3d.js +373 -0
- package/dist/thread/player/display/morph.js +226 -0
- package/dist/thread/player/display/movieclip.js +680 -0
- package/dist/thread/player/display/perspective.js +193 -0
- package/dist/thread/player/display/scale9.js +236 -0
- package/dist/thread/player/display/shapeobject.js +131 -0
- package/dist/thread/player/display/shapes.js +407 -0
- package/dist/thread/player/display/textobjects.js +222 -0
- package/dist/thread/player/display/timeline.js +471 -0
- package/dist/thread/player/display/value-lists.js +40 -0
- package/dist/thread/player/display/videoobject.js +6 -0
- package/dist/thread/player/display/walk.js +127 -0
- package/dist/thread/player/files.js +334 -0
- package/dist/thread/player/hosts.js +207 -0
- package/dist/thread/player/input/avm1.js +82 -0
- package/dist/thread/player/input/context-menu.js +63 -0
- package/dist/thread/player/input/keyboard.js +458 -0
- package/dist/thread/player/input/pointer.js +863 -0
- package/dist/thread/player/input/text-editor.js +319 -0
- package/dist/thread/player/input/touch.js +209 -0
- package/dist/thread/player/localconnection.js +90 -0
- package/dist/thread/player/media/audio.js +376 -0
- package/dist/thread/player/media/dynamic-sound.js +90 -0
- package/dist/thread/player/media/extract.js +135 -0
- package/dist/thread/player/media/mp3.js +152 -0
- package/dist/thread/player/media/sounds.js +507 -0
- package/dist/thread/player/media/streaming-audio.js +133 -0
- package/dist/thread/player/player.js +616 -0
- package/dist/thread/player/playerglobal/air/net/WebSocket.js +250 -0
- package/dist/thread/player/playerglobal/air-library.js +8 -0
- package/dist/thread/player/playerglobal/flash/accessibility/Accessibility.js +21 -0
- package/dist/thread/player/playerglobal/flash/crypto/generateRandomBytes.js +32 -0
- package/dist/thread/player/playerglobal/flash/data/EncryptedLocalStore.js +61 -0
- package/dist/thread/player/playerglobal/flash/desktop/Clipboard.js +173 -0
- package/dist/thread/player/playerglobal/flash/desktop/NativeApplication.js +179 -0
- package/dist/thread/player/playerglobal/flash/display/AVM1Movie.js +19 -0
- package/dist/thread/player/playerglobal/flash/display/Bitmap.js +58 -0
- package/dist/thread/player/playerglobal/flash/display/BitmapData.js +633 -0
- package/dist/thread/player/playerglobal/flash/display/DisplayObject.js +614 -0
- package/dist/thread/player/playerglobal/flash/display/DisplayObjectContainer.js +224 -0
- package/dist/thread/player/playerglobal/flash/display/Graphics.js +345 -0
- package/dist/thread/player/playerglobal/flash/display/InteractiveObject.js +87 -0
- package/dist/thread/player/playerglobal/flash/display/Loader.js +79 -0
- package/dist/thread/player/playerglobal/flash/display/LoaderInfo.js +128 -0
- package/dist/thread/player/playerglobal/flash/display/MovieClip.js +194 -0
- package/dist/thread/player/playerglobal/flash/display/NativeWindow.js +245 -0
- package/dist/thread/player/playerglobal/flash/display/Shader.js +26 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderData.js +85 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderInput.js +64 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderJob.js +181 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderParameter.js +23 -0
- package/dist/thread/player/playerglobal/flash/display/Shape.js +13 -0
- package/dist/thread/player/playerglobal/flash/display/SimpleButton.js +103 -0
- package/dist/thread/player/playerglobal/flash/display/Sprite.js +84 -0
- package/dist/thread/player/playerglobal/flash/display/Stage.js +231 -0
- package/dist/thread/player/playerglobal/flash/display/Stage3D.js +54 -0
- package/dist/thread/player/playerglobal/flash/display/shaders.js +228 -0
- package/dist/thread/player/playerglobal/flash/events/Event.js +58 -0
- package/dist/thread/player/playerglobal/flash/events/EventDispatcher.js +103 -0
- package/dist/thread/player/playerglobal/flash/events/GestureEvent.js +34 -0
- package/dist/thread/player/playerglobal/flash/events/HTTPStatusEvent.js +8 -0
- package/dist/thread/player/playerglobal/flash/events/KeyboardEvent.js +51 -0
- package/dist/thread/player/playerglobal/flash/events/MouseEvent.js +59 -0
- package/dist/thread/player/playerglobal/flash/events/PressAndTapGestureEvent.js +30 -0
- package/dist/thread/player/playerglobal/flash/events/TimerEvent.js +16 -0
- package/dist/thread/player/playerglobal/flash/events/TouchEvent.js +45 -0
- package/dist/thread/player/playerglobal/flash/external/ExternalInterface.js +73 -0
- package/dist/thread/player/playerglobal/flash/filesystem/File.js +340 -0
- package/dist/thread/player/playerglobal/flash/filesystem/FileStream.js +453 -0
- package/dist/thread/player/playerglobal/flash/filesystem/paths.js +156 -0
- package/dist/thread/player/playerglobal/flash/filesystem/writes.js +143 -0
- package/dist/thread/player/playerglobal/flash/filters/BevelFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/BitmapFilter.js +205 -0
- package/dist/thread/player/playerglobal/flash/filters/BlurFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/ColorMatrixFilter.js +11 -0
- package/dist/thread/player/playerglobal/flash/filters/ConvolutionFilter.js +26 -0
- package/dist/thread/player/playerglobal/flash/filters/DisplacementMapFilter.js +51 -0
- package/dist/thread/player/playerglobal/flash/filters/DropShadowFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/GlowFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/GradientBevelFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/GradientGlowFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/ShaderFilter.js +53 -0
- package/dist/thread/player/playerglobal/flash/geom/Matrix3D.js +361 -0
- package/dist/thread/player/playerglobal/flash/geom/PerspectiveProjection.js +122 -0
- package/dist/thread/player/playerglobal/flash/geom/Transform.js +245 -0
- package/dist/thread/player/playerglobal/flash/geom/Utils3D.js +85 -0
- package/dist/thread/player/playerglobal/flash/globalization/Collator.js +149 -0
- package/dist/thread/player/playerglobal/flash/globalization/CurrencyFormatter.js +272 -0
- package/dist/thread/player/playerglobal/flash/globalization/CurrencyParseResult.js +21 -0
- package/dist/thread/player/playerglobal/flash/globalization/DateTimeFormatter.js +463 -0
- package/dist/thread/player/playerglobal/flash/globalization/LocaleID.js +144 -0
- package/dist/thread/player/playerglobal/flash/globalization/NumberFormatter.js +444 -0
- package/dist/thread/player/playerglobal/flash/globalization/NumberParseResult.js +22 -0
- package/dist/thread/player/playerglobal/flash/globalization/StringTools.js +59 -0
- package/dist/thread/player/playerglobal/flash/globalization/locale.js +190 -0
- package/dist/thread/player/playerglobal/flash/media/Camera.js +89 -0
- package/dist/thread/player/playerglobal/flash/media/Microphone.js +126 -0
- package/dist/thread/player/playerglobal/flash/media/Sound.js +543 -0
- package/dist/thread/player/playerglobal/flash/media/SoundMixer.js +74 -0
- package/dist/thread/player/playerglobal/flash/media/SoundTransform.js +40 -0
- package/dist/thread/player/playerglobal/flash/media/Video.js +43 -0
- package/dist/thread/player/playerglobal/flash/net/FileFilter.js +27 -0
- package/dist/thread/player/playerglobal/flash/net/FileReference.js +197 -0
- package/dist/thread/player/playerglobal/flash/net/LocalConnection.js +167 -0
- package/dist/thread/player/playerglobal/flash/net/NetConnection.js +155 -0
- package/dist/thread/player/playerglobal/flash/net/SharedObject.js +299 -0
- package/dist/thread/player/playerglobal/flash/net/Socket.js +282 -0
- package/dist/thread/player/playerglobal/flash/net/URLRequest.js +93 -0
- package/dist/thread/player/playerglobal/flash/net/URLStream.js +146 -0
- package/dist/thread/player/playerglobal/flash/net/XMLSocket.js +14 -0
- package/dist/thread/player/playerglobal/flash/net/local-modern.js +142 -0
- package/dist/thread/player/playerglobal/flash/net/local-values.js +217 -0
- package/dist/thread/player/playerglobal/flash/net/navigateToURL.js +29 -0
- package/dist/thread/player/playerglobal/flash/profiler/Telemetry.js +25 -0
- package/dist/thread/player/playerglobal/flash/sensors/Accelerometer.js +12 -0
- package/dist/thread/player/playerglobal/flash/system/ApplicationDomain.js +69 -0
- package/dist/thread/player/playerglobal/flash/system/Capabilities.js +163 -0
- package/dist/thread/player/playerglobal/flash/system/FSCommandHost.js +17 -0
- package/dist/thread/player/playerglobal/flash/system/Security.js +46 -0
- package/dist/thread/player/playerglobal/flash/system/SecurityDomain.js +21 -0
- package/dist/thread/player/playerglobal/flash/system/System.js +73 -0
- package/dist/thread/player/playerglobal/flash/system/Worker.js +112 -0
- package/dist/thread/player/playerglobal/flash/text/Font.js +95 -0
- package/dist/thread/player/playerglobal/flash/text/StaticText.js +16 -0
- package/dist/thread/player/playerglobal/flash/text/StyleSheet.js +65 -0
- package/dist/thread/player/playerglobal/flash/text/TextField.js +707 -0
- package/dist/thread/player/playerglobal/flash/text/TextRenderer.js +77 -0
- package/dist/thread/player/playerglobal/flash/text/engine/FontDescription.js +141 -0
- package/dist/thread/player/playerglobal/flash/text/engine/TabStop.js +46 -0
- package/dist/thread/player/playerglobal/flash/trace/Trace.js +17 -0
- package/dist/thread/player/playerglobal/flash/ui/ContextMenu.js +17 -0
- package/dist/thread/player/playerglobal/flash/ui/GameInput.js +19 -0
- package/dist/thread/player/playerglobal/flash/ui/Keyboard.js +27 -0
- package/dist/thread/player/playerglobal/flash/ui/Mouse.js +127 -0
- package/dist/thread/player/playerglobal/flash/ui/Multitouch.js +46 -0
- package/dist/thread/player/playerglobal/flash/utils/ByteArray.js +155 -0
- package/dist/thread/player/playerglobal/flash/utils/Timer.js +25 -0
- package/dist/thread/player/playerglobal/flash/xml/XMLDocument.js +74 -0
- package/dist/thread/player/playerglobal/index.js +224 -0
- package/dist/thread/player/playerglobal/libraries.js +10 -0
- package/dist/thread/player/playerglobal/playerglobal-library.js +22 -0
- package/dist/thread/player/playerglobal/toplevel.js +122 -0
- package/dist/thread/player/scripting/clipboard.js +146 -0
- package/dist/thread/player/scripting/code.js +900 -0
- package/dist/thread/player/scripting/evaluate.js +144 -0
- package/dist/thread/player/scripting/events.js +172 -0
- package/dist/thread/player/scripting/handover.js +182 -0
- package/dist/thread/player/scripting/lazy.js +38 -0
- package/dist/thread/player/scripting/lifecycle.js +272 -0
- package/dist/thread/player/scripting/loads.js +860 -0
- package/dist/thread/player/scripting/sha256.js +95 -0
- package/dist/thread/player/scripting/symbols.js +348 -0
- package/dist/thread/player/scripting/timers.js +434 -0
- package/dist/thread/player/scripting/workers.js +923 -0
- package/dist/thread/player/scripting.js +1018 -0
- package/dist/thread/player/stage.js +4 -0
- package/dist/thread/player/text/csm.js +113 -0
- package/dist/thread/player/text/css.js +167 -0
- package/dist/thread/player/text/fonts.js +97 -0
- package/dist/thread/player/text/layout.js +393 -0
- package/dist/thread/player/text/static.js +109 -0
- package/dist/thread/player/text/text.js +431 -0
- package/dist/thread/player/workers/thread.js +159 -0
- package/dist/thread/player/workers/wire.js +198 -0
- package/dist/thread/player-hosts/web-worker.js +19 -0
- package/dist/thread/runtime/avm1/activation.js +89 -0
- package/dist/thread/runtime/avm1/case.js +249 -0
- package/dist/thread/runtime/avm1/clips.js +334 -0
- package/dist/thread/runtime/avm1/control.js +280 -0
- package/dist/thread/runtime/avm1/errors.js +50 -0
- package/dist/thread/runtime/avm1/functions.js +249 -0
- package/dist/thread/runtime/avm1/globals/array.js +549 -0
- package/dist/thread/runtime/avm1/globals/broadcaster.js +131 -0
- package/dist/thread/runtime/avm1/globals/date.js +436 -0
- package/dist/thread/runtime/avm1/globals/global.js +344 -0
- package/dist/thread/runtime/avm1/globals/math.js +139 -0
- package/dist/thread/runtime/avm1/globals/number.js +93 -0
- package/dist/thread/runtime/avm1/globals/string.js +201 -0
- package/dist/thread/runtime/avm1/globals/timers.js +129 -0
- package/dist/thread/runtime/avm1/host.js +5 -0
- package/dist/thread/runtime/avm1/index.js +14 -0
- package/dist/thread/runtime/avm1/inheritance.js +132 -0
- package/dist/thread/runtime/avm1/numbers.js +298 -0
- package/dist/thread/runtime/avm1/objects.js +896 -0
- package/dist/thread/runtime/avm1/operators.js +170 -0
- package/dist/thread/runtime/avm1/realm.js +529 -0
- package/dist/thread/runtime/avm1/runtime.js +882 -0
- package/dist/thread/runtime/avm1/scope.js +385 -0
- package/dist/thread/runtime/avm1/urls.js +180 -0
- package/dist/thread/runtime/avm1/values.js +97 -0
- package/dist/thread/runtime/avm2/amf-classes.js +66 -0
- package/dist/thread/runtime/avm2/amf.js +801 -0
- package/dist/thread/runtime/avm2/array-conversion.js +100 -0
- package/dist/thread/runtime/avm2/builtin-library.js +21 -0
- package/dist/thread/runtime/avm2/cache-fill.js +86 -0
- package/dist/thread/runtime/avm2/classes.js +211 -0
- package/dist/thread/runtime/avm2/definitions.js +69 -0
- package/dist/thread/runtime/avm2/descriptors.js +5 -0
- package/dist/thread/runtime/avm2/dictionary-keys.js +295 -0
- package/dist/thread/runtime/avm2/domain-memory.js +75 -0
- package/dist/thread/runtime/avm2/domain.js +280 -0
- package/dist/thread/runtime/avm2/dynamic-properties.js +182 -0
- package/dist/thread/runtime/avm2/enumeration.js +393 -0
- package/dist/thread/runtime/avm2/errors.js +45 -0
- package/dist/thread/runtime/avm2/float-library.js +66 -0
- package/dist/thread/runtime/avm2/float.js +26 -0
- package/dist/thread/runtime/avm2/hooks.js +19 -0
- package/dist/thread/runtime/avm2/index.js +38 -0
- package/dist/thread/runtime/avm2/messages.js +177 -0
- package/dist/thread/runtime/avm2/method-factories.js +95 -0
- package/dist/thread/runtime/avm2/modules.js +105 -0
- package/dist/thread/runtime/avm2/names.js +248 -0
- package/dist/thread/runtime/avm2/natives/aliases.js +47 -0
- package/dist/thread/runtime/avm2/natives/array.js +390 -0
- package/dist/thread/runtime/avm2/natives/bytearray.js +1227 -0
- package/dist/thread/runtime/avm2/natives/case.js +88 -0
- package/dist/thread/runtime/avm2/natives/concurrent.js +199 -0
- package/dist/thread/runtime/avm2/natives/date.js +581 -0
- package/dist/thread/runtime/avm2/natives/define.js +130 -0
- package/dist/thread/runtime/avm2/natives/describe.js +351 -0
- package/dist/thread/runtime/avm2/natives/dictionary.js +12 -0
- package/dist/thread/runtime/avm2/natives/float-vector.js +81 -0
- package/dist/thread/runtime/avm2/natives/float.js +96 -0
- package/dist/thread/runtime/avm2/natives/index.js +64 -0
- package/dist/thread/runtime/avm2/natives/json.js +514 -0
- package/dist/thread/runtime/avm2/natives/number.js +162 -0
- package/dist/thread/runtime/avm2/natives/object.js +237 -0
- package/dist/thread/runtime/avm2/natives/proxy.js +75 -0
- package/dist/thread/runtime/avm2/natives/regexp.js +485 -0
- package/dist/thread/runtime/avm2/natives/shell-workers.js +404 -0
- package/dist/thread/runtime/avm2/natives/shell.js +557 -0
- package/dist/thread/runtime/avm2/natives/sort.js +377 -0
- package/dist/thread/runtime/avm2/natives/string.js +132 -0
- package/dist/thread/runtime/avm2/natives/sync.js +821 -0
- package/dist/thread/runtime/avm2/natives/toplevel.js +139 -0
- package/dist/thread/runtime/avm2/natives/vector-elements.js +46 -0
- package/dist/thread/runtime/avm2/natives/vector.js +406 -0
- package/dist/thread/runtime/avm2/natives/xml/access.js +633 -0
- package/dist/thread/runtime/avm2/natives/xml/build.js +291 -0
- package/dist/thread/runtime/avm2/natives/xml/chars.js +112 -0
- package/dist/thread/runtime/avm2/natives/xml/escape.js +38 -0
- package/dist/thread/runtime/avm2/natives/xml/names.js +204 -0
- package/dist/thread/runtime/avm2/natives/xml/node.js +272 -0
- package/dist/thread/runtime/avm2/natives/xml/operators.js +69 -0
- package/dist/thread/runtime/avm2/natives/xml/parser.js +356 -0
- package/dist/thread/runtime/avm2/natives/xml/strings.js +191 -0
- package/dist/thread/runtime/avm2/natives/xml/values.js +122 -0
- package/dist/thread/runtime/avm2/natives/xml/xml.js +645 -0
- package/dist/thread/runtime/avm2/number-strings.js +110 -0
- package/dist/thread/runtime/avm2/numbers.js +558 -0
- package/dist/thread/runtime/avm2/options.js +16 -0
- package/dist/thread/runtime/avm2/player-messages.js +550 -0
- package/dist/thread/runtime/avm2/property-cache.js +135 -0
- package/dist/thread/runtime/avm2/runtime.js +2644 -0
- package/dist/thread/runtime/avm2/traits.js +509 -0
- package/dist/thread/runtime/index.js +7 -0
- package/dist/web-worker.d.ts +2 -0
- package/dist/web-worker.d.ts.map +1 -0
- package/dist/web-worker.js +20 -0
- package/dist/web-worker.js.map +1 -0
- package/dist/websocket.d.ts +4 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +27 -0
- package/dist/websocket.js.map +1 -0
- package/dist/workers.d.ts +35 -0
- package/dist/workers.d.ts.map +1 -0
- package/dist/workers.js +171 -0
- package/dist/workers.js.map +1 -0
- package/package.json +62 -3
- package/src/indexeddb.ts +227 -0
- package/src/node-worker.ts +13 -0
- package/src/node.ts +49 -0
- package/src/precompiled.ts +166 -0
- package/src/stage3d.ts +76 -0
- package/src/web-worker.ts +24 -0
- package/src/websocket.ts +32 -0
- package/src/workers.ts +255 -0
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
// The global functions and ASnative, as Ruffle's
|
|
2
|
+
// (https://github.com/ruffle-rs/ruffle) core/src/avm1/globals.rs and
|
|
3
|
+
// globals/asnative.rs have them: MIT OR Apache-2.0, Copyright (c)
|
|
4
|
+
// 2018-2022 Ruffle LLC and Ruffle contributors. Where adl parts from
|
|
5
|
+
// Ruffle, adl decides (docs/avm1.md, "The global functions").
|
|
6
|
+
//
|
|
7
|
+
// ASnative(category, index) gives a new function of Flash's table of
|
|
8
|
+
// natives each call; ASSetNative and ASSetNativeAccessor set an object's
|
|
9
|
+
// methods and properties from it, a version prefixed to a name hiding it
|
|
10
|
+
// from earlier SWFs.
|
|
11
|
+
import { parseFloatAvm1 } from "../numbers.js";
|
|
12
|
+
import { Avm1Function, set, VERSION_6, VERSION_7, VERSION_8, VERSION_9, VERSION_10, } from "../objects.js";
|
|
13
|
+
import { stringOf, toNumber } from "../values.js";
|
|
14
|
+
import { timerFunctions } from "./timers.js";
|
|
15
|
+
const HEX = "0123456789ABCDEF";
|
|
16
|
+
const encoder = new TextEncoder();
|
|
17
|
+
/** A string's bytes: up to SWF 5 its characters, each a byte; from 6 its UTF-8. */
|
|
18
|
+
function bytesOf(s, version) {
|
|
19
|
+
if (version >= 6) {
|
|
20
|
+
return encoder.encode(s);
|
|
21
|
+
}
|
|
22
|
+
const bytes = [];
|
|
23
|
+
for (let i = 0; i < s.length; i++) {
|
|
24
|
+
const c = s.charCodeAt(i);
|
|
25
|
+
if (c <= 0xff) {
|
|
26
|
+
bytes.push(c);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
bytes.push(...encoder.encode(s[i]));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return bytes;
|
|
33
|
+
}
|
|
34
|
+
/** escape: every byte but a letter or a digit as %XX. */
|
|
35
|
+
export function escapeAvm1(s, version) {
|
|
36
|
+
const bytes = bytesOf(s, version);
|
|
37
|
+
let out = "";
|
|
38
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
39
|
+
const b = bytes[i];
|
|
40
|
+
if ((b >= 0x30 && b <= 0x39) || (b >= 0x41 && b <= 0x5a) || (b >= 0x61 && b <= 0x7a)) {
|
|
41
|
+
out += String.fromCharCode(b);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
out += `%${HEX[b >> 4]}${HEX[b & 15]}`;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return out;
|
|
48
|
+
}
|
|
49
|
+
const hexValue = (c) => c >= 0x30 && c <= 0x39
|
|
50
|
+
? c - 0x30
|
|
51
|
+
: c >= 0x41 && c <= 0x46
|
|
52
|
+
? c - 0x37
|
|
53
|
+
: c >= 0x61 && c <= 0x66
|
|
54
|
+
? c - 0x57
|
|
55
|
+
: -1;
|
|
56
|
+
/**
|
|
57
|
+
* unescape: %XX the byte XX, + a space; a % before what is no hex digit
|
|
58
|
+
* drops that character. The bytes are a SWF 5's string, and from SWF 6
|
|
59
|
+
* read as its strings' UTF-8 is (decodeLenient).
|
|
60
|
+
*/
|
|
61
|
+
export function unescapeAvm1(s, version) {
|
|
62
|
+
const bytes = bytesOf(s, version);
|
|
63
|
+
const out = [];
|
|
64
|
+
let remain = 0;
|
|
65
|
+
let digits = 0;
|
|
66
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
67
|
+
const b = bytes[i];
|
|
68
|
+
if (b === 0x25) {
|
|
69
|
+
remain = 2;
|
|
70
|
+
digits = 0;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (remain > 0) {
|
|
74
|
+
const v = hexValue(b);
|
|
75
|
+
if (v < 0) {
|
|
76
|
+
remain = 0;
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
digits = (digits << 4) | v;
|
|
80
|
+
remain--;
|
|
81
|
+
if (remain === 0) {
|
|
82
|
+
out.push(digits);
|
|
83
|
+
}
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
out.push(b === 0x2b ? 0x20 : b);
|
|
87
|
+
}
|
|
88
|
+
if (version < 6) {
|
|
89
|
+
let text = "";
|
|
90
|
+
for (const b of out) {
|
|
91
|
+
text += String.fromCharCode(b);
|
|
92
|
+
}
|
|
93
|
+
return text;
|
|
94
|
+
}
|
|
95
|
+
return decodeLenient(out);
|
|
96
|
+
}
|
|
97
|
+
/** What ConvertUTF.c subtracts from the sum of a sequence of 1 to 6 bytes. */
|
|
98
|
+
const OFFSETS = [0, 0x3080, 0xe2080, 0x3c82080, 0xfa082080, 0x82082080];
|
|
99
|
+
/**
|
|
100
|
+
* Bytes read as UTF-8 leniently, as adl reads a SWF 6's strings
|
|
101
|
+
* (codegen's avm1/emit/strings.ts): a lead byte takes as many bytes as its
|
|
102
|
+
* high bits say, continuation bytes or not, summed as Unicode's old
|
|
103
|
+
* ConvertUTF.c sums them; a surrogate or a code point past U+10FFFF is
|
|
104
|
+
* U+FFFD, and a code point of 0, or a sequence cut short, ends the string.
|
|
105
|
+
*/
|
|
106
|
+
function decodeLenient(bytes) {
|
|
107
|
+
let out = "";
|
|
108
|
+
let i = 0;
|
|
109
|
+
while (i < bytes.length) {
|
|
110
|
+
const b = bytes[i];
|
|
111
|
+
if (b === 0) {
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
if (b < 0x80) {
|
|
115
|
+
out += String.fromCharCode(b);
|
|
116
|
+
i++;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const more = b < 0xc0 ? 0 : b < 0xe0 ? 1 : b < 0xf0 ? 2 : b < 0xf8 ? 3 : b < 0xfc ? 4 : 5;
|
|
120
|
+
if (more >= bytes.length - i) {
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
let c = 0;
|
|
124
|
+
for (let k = 0; k <= more; k++) {
|
|
125
|
+
c = ((c << 6) + bytes[i + k]) >>> 0;
|
|
126
|
+
}
|
|
127
|
+
c = (c - OFFSETS[more]) >>> 0;
|
|
128
|
+
i += more + 1;
|
|
129
|
+
if (c === 0) {
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
out += c > 0x10ffff || (c >= 0xd800 && c <= 0xdfff) ? "�" : String.fromCodePoint(c);
|
|
133
|
+
}
|
|
134
|
+
return out;
|
|
135
|
+
}
|
|
136
|
+
const isSign = (c) => c === 0x2b || c === 0x2d;
|
|
137
|
+
/**
|
|
138
|
+
* parseInt, as Ruffle has it and adl agrees: "0x" after a sign is NaN
|
|
139
|
+
* unless the radix reads it, a leading "0x" is hex whatever the radix, a
|
|
140
|
+
* leading 0 octal where every digit after it is, spaces and a sign after
|
|
141
|
+
* the prefix, NaN without a digit.
|
|
142
|
+
*/
|
|
143
|
+
export function parseIntAvm1(s, radixValue, hasRadix, version) {
|
|
144
|
+
let radix = 0;
|
|
145
|
+
if (hasRadix) {
|
|
146
|
+
radix = toNumber(radixValue, version) | 0;
|
|
147
|
+
if (radix < 2 || radix > 36) {
|
|
148
|
+
return Number.NaN;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const signed = s.length > 0 && isSign(s.charCodeAt(0));
|
|
152
|
+
const off = signed ? 1 : 0;
|
|
153
|
+
const zero = s.charCodeAt(off) === 0x30;
|
|
154
|
+
const x = s.charCodeAt(off + 1);
|
|
155
|
+
const hex = zero && (x === 0x78 || x === 0x58);
|
|
156
|
+
let ignoreSign = false;
|
|
157
|
+
let rest = s;
|
|
158
|
+
if (hex) {
|
|
159
|
+
if (signed) {
|
|
160
|
+
if (radix <= 33) {
|
|
161
|
+
return Number.NaN;
|
|
162
|
+
}
|
|
163
|
+
ignoreSign = true;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
radix ||= 16;
|
|
167
|
+
rest = s.slice(2);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
else if (zero && radix === 0 && /^[0-7]*$/.test(s.slice(1))) {
|
|
171
|
+
radix = 8;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
radix ||= 10;
|
|
175
|
+
}
|
|
176
|
+
let i = 0;
|
|
177
|
+
while (i < rest.length) {
|
|
178
|
+
const c = rest.charCodeAt(i);
|
|
179
|
+
if (c !== 0x20 && c !== 0x09 && c !== 0x0a && c !== 0x0d) {
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
i++;
|
|
183
|
+
}
|
|
184
|
+
let sign = 1;
|
|
185
|
+
if (i < rest.length && isSign(rest.charCodeAt(i))) {
|
|
186
|
+
if (!ignoreSign && rest.charCodeAt(i) === 0x2d) {
|
|
187
|
+
sign = -1;
|
|
188
|
+
}
|
|
189
|
+
i++;
|
|
190
|
+
}
|
|
191
|
+
let result = 0;
|
|
192
|
+
let empty = true;
|
|
193
|
+
for (; i < rest.length; i++) {
|
|
194
|
+
const c = rest.charCodeAt(i);
|
|
195
|
+
const d = c >= 0x30 && c <= 0x39
|
|
196
|
+
? c - 0x30
|
|
197
|
+
: c >= 0x61 && c <= 0x7a
|
|
198
|
+
? c - 0x57
|
|
199
|
+
: c >= 0x41 && c <= 0x5a
|
|
200
|
+
? c - 0x37
|
|
201
|
+
: 99;
|
|
202
|
+
if (d >= radix) {
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
result = result * radix + d;
|
|
206
|
+
empty = false;
|
|
207
|
+
}
|
|
208
|
+
return empty ? Number.NaN : sign * result;
|
|
209
|
+
}
|
|
210
|
+
/** The version a name's prefix says, and the name without it: `8max` is max from SWF 8. */
|
|
211
|
+
function versioned(name) {
|
|
212
|
+
switch (name.charCodeAt(0)) {
|
|
213
|
+
case 0x36:
|
|
214
|
+
return [name.slice(1), VERSION_6];
|
|
215
|
+
case 0x37:
|
|
216
|
+
return [name.slice(1), VERSION_7];
|
|
217
|
+
case 0x38:
|
|
218
|
+
return [name.slice(1), VERSION_8];
|
|
219
|
+
case 0x39:
|
|
220
|
+
return [name.slice(1), VERSION_9];
|
|
221
|
+
case 0x31:
|
|
222
|
+
return name.charCodeAt(1) === 0x30 ? [name.slice(2), VERSION_10] : [name.slice(1), 0];
|
|
223
|
+
default:
|
|
224
|
+
return [name, 0];
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* The categories Flash Player has a table of natives for, as ranges: adl
|
|
229
|
+
* gives a function for any index of these, and undefined for any other.
|
|
230
|
+
* Those of the classes swf2es has no natives of yet give functions of none.
|
|
231
|
+
*/
|
|
232
|
+
const CATEGORIES = [
|
|
233
|
+
[1, 5],
|
|
234
|
+
[9, 9],
|
|
235
|
+
[11, 15],
|
|
236
|
+
[100, 107],
|
|
237
|
+
[110, 113],
|
|
238
|
+
[200, 200],
|
|
239
|
+
[250, 253],
|
|
240
|
+
[300, 301],
|
|
241
|
+
[400, 400],
|
|
242
|
+
[500, 500],
|
|
243
|
+
[600, 600],
|
|
244
|
+
[666, 667],
|
|
245
|
+
[700, 700],
|
|
246
|
+
[800, 800],
|
|
247
|
+
[900, 901],
|
|
248
|
+
[1021, 1021],
|
|
249
|
+
[1066, 1067],
|
|
250
|
+
[1100, 1103],
|
|
251
|
+
[1105, 1112],
|
|
252
|
+
[1999, 1999],
|
|
253
|
+
[2100, 2102],
|
|
254
|
+
[2104, 2104],
|
|
255
|
+
[2106, 2108],
|
|
256
|
+
[2150, 2151],
|
|
257
|
+
[2198, 2198],
|
|
258
|
+
[2200, 2201],
|
|
259
|
+
[2204, 2205],
|
|
260
|
+
[2341, 2341],
|
|
261
|
+
[2401, 2401],
|
|
262
|
+
];
|
|
263
|
+
const isCategory = (category) => CATEGORIES.some(([first, last]) => category >= first && category <= last);
|
|
264
|
+
/** ASnative(category, index): a new function of the table's native, undefined for no table. */
|
|
265
|
+
export function asnative(realm, category, index) {
|
|
266
|
+
const table = realm.natives.get(category);
|
|
267
|
+
if (table === undefined) {
|
|
268
|
+
return isCategory(category) ? realm.method(none) : undefined;
|
|
269
|
+
}
|
|
270
|
+
// An index past a u16 is no native's.
|
|
271
|
+
// Any index of a table is a function, one of none giving undefined.
|
|
272
|
+
return realm.method(table(index > 0xffff ? 0xffff : index) ?? none);
|
|
273
|
+
}
|
|
274
|
+
/** ASSetNative (`accessor` false) and ASSetNativeAccessor. */
|
|
275
|
+
function setNative(realm, args, version, accessor) {
|
|
276
|
+
if (args.length < 3) {
|
|
277
|
+
return undefined;
|
|
278
|
+
}
|
|
279
|
+
const object = realm.box(args[0], version);
|
|
280
|
+
const major = toNumber(args[1], version) | 0;
|
|
281
|
+
const names = stringOf(args[2], version);
|
|
282
|
+
let minor = args.length > 3 ? toNumber(args[3], version) | 0 : 0;
|
|
283
|
+
for (const prefixed of names.split(",")) {
|
|
284
|
+
const [name, flags] = versioned(prefixed);
|
|
285
|
+
if (!accessor) {
|
|
286
|
+
const f = asnative(realm, major, minor >>> 0);
|
|
287
|
+
minor++;
|
|
288
|
+
if (name !== "") {
|
|
289
|
+
const had = object.own(name, version) !== undefined;
|
|
290
|
+
set(object, name, f, version);
|
|
291
|
+
const p = object.own(name, version);
|
|
292
|
+
if (!had && p !== undefined) {
|
|
293
|
+
p.flags |= flags;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
const getter = asnative(realm, major, minor >>> 0);
|
|
299
|
+
const setter = asnative(realm, major, (minor + 1) >>> 0);
|
|
300
|
+
minor += 2;
|
|
301
|
+
if (name !== "" && getter instanceof Avm1Function) {
|
|
302
|
+
const p = object.own(name, version) ?? object.add(name, undefined, 0);
|
|
303
|
+
p.get = getter;
|
|
304
|
+
p.set = setter instanceof Avm1Function ? setter : null;
|
|
305
|
+
p.flags |= flags;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return undefined;
|
|
309
|
+
}
|
|
310
|
+
/** The global functions, defined on `_global` in Flash's order by `define`. */
|
|
311
|
+
export function globalFunctions(realm, define) {
|
|
312
|
+
const escapeFn = (_, args, version) => args.length > 0 ? escapeAvm1(stringOf(args[0], version), version) : undefined;
|
|
313
|
+
const unescapeFn = (_, args, version) => args.length > 0 ? unescapeAvm1(stringOf(args[0], version), version) : undefined;
|
|
314
|
+
const parseIntFn = (_, args, version) => args.length > 0
|
|
315
|
+
? parseIntAvm1(stringOf(args[0], version), args[1], args.length > 1, version)
|
|
316
|
+
: undefined;
|
|
317
|
+
const parseFloatFn = (_, args, version) => args.length > 0 ? parseFloatAvm1(stringOf(args[0], version), false) : undefined;
|
|
318
|
+
// _global.trace: undefined is "" up to SWF 6, as any string conversion has it.
|
|
319
|
+
// Flash's authoring tool shows it, where Flash Player's log and adl's do
|
|
320
|
+
// not; the log is for debugging, so it writes, as Ruffle's does.
|
|
321
|
+
const traceFn = (_, args, version) => {
|
|
322
|
+
realm.current?.host.trace(stringOf(args.length > 0 ? args[0] : undefined, version));
|
|
323
|
+
return undefined;
|
|
324
|
+
};
|
|
325
|
+
const setNativeFn = (_, args, version) => setNative(realm, args, version, false);
|
|
326
|
+
const setAccessorFn = (_, args, version) => setNative(realm, args, version, true);
|
|
327
|
+
realm.natives.set(100, (i) => [escapeFn, unescapeFn, parseIntFn, parseFloatFn, traceFn][i] ?? none);
|
|
328
|
+
realm.natives.set(4, (i) => [setNativeFn, setAccessorFn][i] ?? none);
|
|
329
|
+
define("ASSetNative", setNativeFn);
|
|
330
|
+
define("ASSetNativeAccessor", setAccessorFn);
|
|
331
|
+
define("escape", escapeFn);
|
|
332
|
+
define("unescape", unescapeFn);
|
|
333
|
+
define("parseInt", parseIntFn);
|
|
334
|
+
define("parseFloat", parseFloatFn);
|
|
335
|
+
define("trace", traceFn);
|
|
336
|
+
define("updateAfterEvent", () => undefined);
|
|
337
|
+
define("isNaN", (_, args, version) => args.length > 0 ? Number.isNaN(toNumber(args[0], version)) : true);
|
|
338
|
+
define("isFinite", (_, args, version) => args.length > 0 ? Number.isFinite(toNumber(args[0], version)) : false);
|
|
339
|
+
for (const [name, native] of timerFunctions(realm)) {
|
|
340
|
+
define(name, native);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
/** A table's native for an index it has none at: undefined. */
|
|
344
|
+
const none = () => undefined;
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// Math, as Ruffle's (https://github.com/ruffle-rs/ruffle)
|
|
2
|
+
// core/src/avm1/globals/math.rs has it: MIT OR Apache-2.0, Copyright (c)
|
|
3
|
+
// 2018-2022 Ruffle LLC and Ruffle contributors. Where adl parts from
|
|
4
|
+
// Ruffle, adl decides (docs/avm1.md, "Number, Boolean and Math").
|
|
5
|
+
//
|
|
6
|
+
// Each method is ASnative(200, i), which converts its first two arguments
|
|
7
|
+
// whether it uses them or not, as their valueOf can tell; a SWF up to 6
|
|
8
|
+
// gets NaN from a method given fewer arguments than it takes.
|
|
9
|
+
import { Avm1Object, DONT_DELETE, DONT_ENUM, READ_ONLY } from "../objects.js";
|
|
10
|
+
import { toNumber } from "../values.js";
|
|
11
|
+
/** The methods, in the order of their ASnative indices. */
|
|
12
|
+
const MATH_METHODS = [
|
|
13
|
+
"abs",
|
|
14
|
+
"min",
|
|
15
|
+
"max",
|
|
16
|
+
"sin",
|
|
17
|
+
"cos",
|
|
18
|
+
"atan2",
|
|
19
|
+
"tan",
|
|
20
|
+
"exp",
|
|
21
|
+
"log",
|
|
22
|
+
"sqrt",
|
|
23
|
+
"round",
|
|
24
|
+
"random",
|
|
25
|
+
"floor",
|
|
26
|
+
"ceil",
|
|
27
|
+
"atan",
|
|
28
|
+
"asin",
|
|
29
|
+
"acos",
|
|
30
|
+
"pow",
|
|
31
|
+
];
|
|
32
|
+
const MIN = 1;
|
|
33
|
+
const MAX = 2;
|
|
34
|
+
const ATAN2 = 5;
|
|
35
|
+
const RANDOM = 11;
|
|
36
|
+
const POW = 17;
|
|
37
|
+
/** A random number from 0 to 1, of the 2^31 Flash's generator gives. */
|
|
38
|
+
const random = () => Math.floor(Math.random() * 0x80000000) / 0x80000000;
|
|
39
|
+
/** Whether a SWF up to 6 runs method `index` with `count` arguments, `x` the first. */
|
|
40
|
+
function enough(index, count, x) {
|
|
41
|
+
switch (index) {
|
|
42
|
+
case RANDOM:
|
|
43
|
+
return true;
|
|
44
|
+
case MIN:
|
|
45
|
+
case MAX:
|
|
46
|
+
return count !== 1;
|
|
47
|
+
case POW:
|
|
48
|
+
return count > 1 || (count === 1 && x === 1);
|
|
49
|
+
case ATAN2:
|
|
50
|
+
return count > 1;
|
|
51
|
+
default:
|
|
52
|
+
return count > 0;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* C's pow, as Flash Player's is (the corpus's math tests): 1 to any power
|
|
57
|
+
* and -1 to an infinite one are 1, where JavaScript's are NaN. adl's, AIR's
|
|
58
|
+
* under Wine, is JavaScript's there, and off it elsewhere (2^0.5's last
|
|
59
|
+
* bit, 1.0000001^1e9 from the ninth digit): JavaScript's precision stays.
|
|
60
|
+
*/
|
|
61
|
+
function pow(x, y) {
|
|
62
|
+
if (x === 1 || (x === -1 && (y === Number.POSITIVE_INFINITY || y === Number.NEGATIVE_INFINITY))) {
|
|
63
|
+
return 1;
|
|
64
|
+
}
|
|
65
|
+
return x ** y;
|
|
66
|
+
}
|
|
67
|
+
function compute(index, x, y, count) {
|
|
68
|
+
switch (index) {
|
|
69
|
+
case 0:
|
|
70
|
+
return Math.abs(x);
|
|
71
|
+
case MIN:
|
|
72
|
+
return count === 0 ? Number.POSITIVE_INFINITY : Math.min(x, y);
|
|
73
|
+
case MAX:
|
|
74
|
+
return count === 0 ? Number.NEGATIVE_INFINITY : Math.max(x, y);
|
|
75
|
+
case 3:
|
|
76
|
+
return Math.sin(x);
|
|
77
|
+
case 4:
|
|
78
|
+
return Math.cos(x);
|
|
79
|
+
case ATAN2:
|
|
80
|
+
return Math.atan2(x, y);
|
|
81
|
+
case 6:
|
|
82
|
+
return Math.tan(x);
|
|
83
|
+
case 7:
|
|
84
|
+
return Math.exp(x);
|
|
85
|
+
case 8:
|
|
86
|
+
return Math.log(x);
|
|
87
|
+
case 9:
|
|
88
|
+
return Math.sqrt(x);
|
|
89
|
+
// Flash rounds a half up, towards infinity.
|
|
90
|
+
case 10:
|
|
91
|
+
return Math.floor(x + 0.5);
|
|
92
|
+
case RANDOM:
|
|
93
|
+
return random();
|
|
94
|
+
case 12:
|
|
95
|
+
return Math.floor(x);
|
|
96
|
+
case 13:
|
|
97
|
+
return Math.ceil(x);
|
|
98
|
+
case 14:
|
|
99
|
+
return Math.atan(x);
|
|
100
|
+
case 15:
|
|
101
|
+
return Math.asin(x);
|
|
102
|
+
case 16:
|
|
103
|
+
return Math.acos(x);
|
|
104
|
+
case POW:
|
|
105
|
+
return pow(x, y);
|
|
106
|
+
default:
|
|
107
|
+
return Number.NaN;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/** ASnative(200, index): a Math method, NaN for an index of none. */
|
|
111
|
+
export function mathNative(index) {
|
|
112
|
+
return (_, args, version) => {
|
|
113
|
+
const x = toNumber(args.length > 0 ? args[0] : undefined, version);
|
|
114
|
+
const y = toNumber(args.length > 1 ? args[1] : undefined, version);
|
|
115
|
+
if (version <= 6 && !enough(index, args.length, x)) {
|
|
116
|
+
return Number.NaN;
|
|
117
|
+
}
|
|
118
|
+
return compute(index, x, y, args.length);
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/** The Math object: `constructor` and `__proto__` as an object's, its constants, then its methods. */
|
|
122
|
+
export function mathObject(realm) {
|
|
123
|
+
const math = new Avm1Object();
|
|
124
|
+
math.define("constructor", realm.Object, DONT_ENUM | DONT_DELETE);
|
|
125
|
+
math.define("__proto__", realm.objectProto, DONT_ENUM | DONT_DELETE);
|
|
126
|
+
const flags = DONT_ENUM | DONT_DELETE | READ_ONLY;
|
|
127
|
+
math.define("SQRT2", Math.SQRT2, flags);
|
|
128
|
+
math.define("SQRT1_2", Math.SQRT1_2, flags);
|
|
129
|
+
math.define("PI", Math.PI, flags);
|
|
130
|
+
math.define("LOG2E", Math.LOG2E, flags);
|
|
131
|
+
math.define("LOG10E", Math.LOG10E, flags);
|
|
132
|
+
math.define("LN2", Math.LN2, flags);
|
|
133
|
+
math.define("LN10", Math.LN10, flags);
|
|
134
|
+
math.define("E", Math.E, flags);
|
|
135
|
+
for (let i = 0; i < MATH_METHODS.length; i++) {
|
|
136
|
+
math.define(MATH_METHODS[i], realm.method(mathNative(i)), flags);
|
|
137
|
+
}
|
|
138
|
+
return math;
|
|
139
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// Number and Boolean, as Ruffle's (https://github.com/ruffle-rs/ruffle)
|
|
2
|
+
// core/src/avm1/globals/number.rs and boolean.rs have them: MIT OR
|
|
3
|
+
// Apache-2.0, Copyright (c) 2018-2022 Ruffle LLC and Ruffle contributors.
|
|
4
|
+
// Where adl parts from Ruffle, adl decides (docs/avm1.md, "Number, Boolean
|
|
5
|
+
// and Math").
|
|
6
|
+
//
|
|
7
|
+
// Their methods take `this` unboxed, and give undefined for anything but
|
|
8
|
+
// their own kind of value, a primitive or its object.
|
|
9
|
+
import { numberToString } from "../numbers.js";
|
|
10
|
+
import { Avm1Object, DONT_DELETE, DONT_ENUM, READ_ONLY } from "../objects.js";
|
|
11
|
+
import { clampInt } from "../operators.js";
|
|
12
|
+
import { toBoolean, toNumber } from "../values.js";
|
|
13
|
+
/** `this` as a Number's number, undefined for anything else. */
|
|
14
|
+
const numberOf = (self) => typeof self === "number"
|
|
15
|
+
? self
|
|
16
|
+
: self instanceof Avm1Object && typeof self.primitive === "number"
|
|
17
|
+
? self.primitive
|
|
18
|
+
: undefined;
|
|
19
|
+
/** `this` as a Boolean's boolean, undefined for anything else. */
|
|
20
|
+
const booleanOf = (self) => typeof self === "boolean"
|
|
21
|
+
? self
|
|
22
|
+
: self instanceof Avm1Object && typeof self.primitive === "boolean"
|
|
23
|
+
? self.primitive
|
|
24
|
+
: undefined;
|
|
25
|
+
/** A double cast to an int as Rust's `as` casts it: saturated, NaN 0. */
|
|
26
|
+
const saturated = (n) => Number.isNaN(n) ? 0 : Math.trunc(Math.max(-2147483648, Math.min(2147483647, n)));
|
|
27
|
+
/**
|
|
28
|
+
* `n` in base `radix`, as Flash writes it: the number cast to an int, so
|
|
29
|
+
* that a fraction is cut, and NaN, the infinities and anything out of range
|
|
30
|
+
* are -2^31, whose digits Flash writes as the remainders it takes, each
|
|
31
|
+
* negative: `(1e20).toString(16)` is "-(0000000".
|
|
32
|
+
*/
|
|
33
|
+
export function toRadix(n, radix) {
|
|
34
|
+
let v = clampInt(n);
|
|
35
|
+
if (v === 0) {
|
|
36
|
+
return "0";
|
|
37
|
+
}
|
|
38
|
+
const negative = v < 0;
|
|
39
|
+
if (negative) {
|
|
40
|
+
v = -v | 0;
|
|
41
|
+
}
|
|
42
|
+
let digits = "";
|
|
43
|
+
while (v !== 0) {
|
|
44
|
+
const d = v % radix;
|
|
45
|
+
v = Math.trunc(v / radix);
|
|
46
|
+
digits = String.fromCharCode(d < 10 ? 0x30 + d : 0x61 + d - 10) + digits;
|
|
47
|
+
}
|
|
48
|
+
return negative ? `-${digits}` : digits;
|
|
49
|
+
}
|
|
50
|
+
export function numberClass(realm) {
|
|
51
|
+
const proto = new Avm1Object();
|
|
52
|
+
const constr = realm.classOf(proto, (self, args, version) => {
|
|
53
|
+
self.primitive = args.length > 0 ? toNumber(args[0], version) : 0;
|
|
54
|
+
return self;
|
|
55
|
+
}, (_, args, version) => (args.length > 0 ? toNumber(args[0], version) : 0),
|
|
56
|
+
// Read-only, as Object's is (adl), unlike Boolean's and String's.
|
|
57
|
+
READ_ONLY);
|
|
58
|
+
proto.define("__proto__", realm.objectProto, DONT_ENUM | DONT_DELETE);
|
|
59
|
+
const constant = DONT_ENUM | DONT_DELETE | READ_ONLY;
|
|
60
|
+
constr.define("NaN", Number.NaN, constant);
|
|
61
|
+
constr.define("POSITIVE_INFINITY", Number.POSITIVE_INFINITY, constant);
|
|
62
|
+
constr.define("NEGATIVE_INFINITY", Number.NEGATIVE_INFINITY, constant);
|
|
63
|
+
constr.define("MIN_VALUE", Number.MIN_VALUE, constant);
|
|
64
|
+
constr.define("MAX_VALUE", Number.MAX_VALUE, constant);
|
|
65
|
+
const define = (name, native) => proto.define(name, realm.rawMethod(native), DONT_ENUM | DONT_DELETE);
|
|
66
|
+
define("valueOf", (self) => numberOf(self));
|
|
67
|
+
define("toString", (self, args, version) => {
|
|
68
|
+
const n = numberOf(self);
|
|
69
|
+
if (n === undefined) {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
const radix = args.length > 0 ? saturated(toNumber(args[0], version)) : 10;
|
|
73
|
+
return radix < 2 || radix > 36 || radix === 10 ? numberToString(n) : toRadix(n, radix);
|
|
74
|
+
});
|
|
75
|
+
return { constr, proto };
|
|
76
|
+
}
|
|
77
|
+
export function booleanClass(realm) {
|
|
78
|
+
const proto = new Avm1Object();
|
|
79
|
+
const constr = realm.classOf(proto, (self, args, version) => {
|
|
80
|
+
self.primitive = args.length > 0 && toBoolean(args[0], version);
|
|
81
|
+
return self;
|
|
82
|
+
},
|
|
83
|
+
// Boolean() of nothing is undefined.
|
|
84
|
+
(_, args, version) => (args.length > 0 ? toBoolean(args[0], version) : undefined));
|
|
85
|
+
proto.define("__proto__", realm.objectProto, DONT_ENUM | DONT_DELETE);
|
|
86
|
+
const define = (name, native) => proto.define(name, realm.rawMethod(native), DONT_ENUM | DONT_DELETE);
|
|
87
|
+
define("valueOf", (self) => booleanOf(self));
|
|
88
|
+
define("toString", (self) => {
|
|
89
|
+
const b = booleanOf(self);
|
|
90
|
+
return b === undefined ? undefined : String(b);
|
|
91
|
+
});
|
|
92
|
+
return { constr, proto };
|
|
93
|
+
}
|