@swf2es/player-hosts 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,110 @@
|
|
|
1
|
+
// Numbers to and from strings as AS3 converts them: JavaScript's own
|
|
2
|
+
// conversions where they give avmplus' results, which is nearly always and
|
|
3
|
+
// many times faster, and avmplus' rules where they do not.
|
|
4
|
+
import { convertDoubleToString } from "./numbers.js";
|
|
5
|
+
/**
|
|
6
|
+
* As avmplus' String to Number: JavaScript's, without its binary and octal
|
|
7
|
+
* prefixes. JavaScript skips the whitespace trim() does, so a number it
|
|
8
|
+
* reads is avmplus' unless it came from such a prefix; only that, or one it
|
|
9
|
+
* cannot read, needs avmplus' own rules.
|
|
10
|
+
*/
|
|
11
|
+
export function stringToNumber(s) {
|
|
12
|
+
const n = Number(s);
|
|
13
|
+
if (!Number.isNaN(n)) {
|
|
14
|
+
return binaryOrOctal(s) ? Number.NaN : n;
|
|
15
|
+
}
|
|
16
|
+
return unreadNumber(s);
|
|
17
|
+
}
|
|
18
|
+
/** Whether `s`, which JavaScript read as a number, starts with a binary or octal prefix. */
|
|
19
|
+
function binaryOrOctal(s) {
|
|
20
|
+
let i = 0;
|
|
21
|
+
while (i < s.length) {
|
|
22
|
+
const c = s.charCodeAt(i);
|
|
23
|
+
if (c !== 0x20 && (c < 0x09 || c > 0x0d)) {
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
i++;
|
|
27
|
+
}
|
|
28
|
+
// Whitespace past ASCII is rare: trimStart knows all of it.
|
|
29
|
+
if (s.charCodeAt(i) > 0x7f) {
|
|
30
|
+
return /^0[bBoO]/.test(s.trimStart());
|
|
31
|
+
}
|
|
32
|
+
const next = s.charCodeAt(i + 1) | 0x20;
|
|
33
|
+
return s.charCodeAt(i) === 0x30 && (next === 0x62 || next === 0x6f);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A string JavaScript reads as NaN, as avmplus reads it: a sign before a hex
|
|
37
|
+
* number, a NUL that ends the number, an exponent with no digits; anything
|
|
38
|
+
* else, a binary or octal prefix among it, is NaN.
|
|
39
|
+
*/
|
|
40
|
+
function unreadNumber(s) {
|
|
41
|
+
const t = s.trim();
|
|
42
|
+
if (/^[-+]0[xX]/.test(t)) {
|
|
43
|
+
const n = Number(t.slice(1));
|
|
44
|
+
return t[0] === "-" ? -n : n;
|
|
45
|
+
}
|
|
46
|
+
// As avmplus, a NUL ends the number, and one before any is none.
|
|
47
|
+
const nul = s.indexOf("\0");
|
|
48
|
+
if (nul > 0 && s.slice(0, nul).trim() !== "") {
|
|
49
|
+
return stringToNumber(s.slice(0, nul));
|
|
50
|
+
}
|
|
51
|
+
// "4e" or "4e+": the exponent is left off.
|
|
52
|
+
const bare = /^([-+]?(?:\d+\.?\d*|\.\d+))[eE]\+?$/.exec(t);
|
|
53
|
+
return bare ? Number(bare[1]) : Number.NaN;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* A number as AS3 writes it: avmplus' own formatting, not JavaScript's,
|
|
57
|
+
* though the two agree, and JavaScript's is some ten times faster, for an
|
|
58
|
+
* int, and for a number from 1e-6 up to 1e15 that JavaScript writes with 15
|
|
59
|
+
* significant digits or fewer. Both write the shortest digits that read
|
|
60
|
+
* back as the number, and no two decimals of 15 digits read back as one
|
|
61
|
+
* double; past 15 they can part on the last digit, which avmplus rounds up
|
|
62
|
+
* (209.14077758789063 where JavaScript has ...062), and from 1e15 up every
|
|
63
|
+
* number takes 16 or more (tests/unit/runtime/numbers.test.ts).
|
|
64
|
+
*/
|
|
65
|
+
export function numberToString(n) {
|
|
66
|
+
if ((n | 0) === n) {
|
|
67
|
+
return String(n);
|
|
68
|
+
}
|
|
69
|
+
const magnitude = n < 0 ? -n : n;
|
|
70
|
+
if (magnitude >= 1e-6 && magnitude < 1e15) {
|
|
71
|
+
const text = String(n);
|
|
72
|
+
if (significantDigits(text) <= 15) {
|
|
73
|
+
return text;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return convertDoubleToString(n);
|
|
77
|
+
}
|
|
78
|
+
/** The significant digits in a number JavaScript wrote in plain decimals: all but its leading zeros. */
|
|
79
|
+
function significantDigits(text) {
|
|
80
|
+
let digits = 0;
|
|
81
|
+
for (let i = 0; i < text.length; i++) {
|
|
82
|
+
const c = text.charCodeAt(i);
|
|
83
|
+
if (c > 0x30 && c <= 0x39) {
|
|
84
|
+
digits++;
|
|
85
|
+
}
|
|
86
|
+
else if (c === 0x30 && digits > 0) {
|
|
87
|
+
digits++;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return digits;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* The number AS3 reads back from the string it writes for `n`, as
|
|
94
|
+
* stringToNumber(numberToString(n)), without writing it. Below 1e21 D2A
|
|
95
|
+
* writes every digit Burger and Dybvig's shortest form needs, so the string
|
|
96
|
+
* reads back as the number itself, but -0 writes "0"; from 1e21 up it writes
|
|
97
|
+
* an exponent with 15 digits at most, which can read back as another number
|
|
98
|
+
* (1.79769313486231e+308 for Number.MAX_VALUE, past which it is Infinity).
|
|
99
|
+
*/
|
|
100
|
+
export function numberReadBack(n) {
|
|
101
|
+
const magnitude = n < 0 ? -n : n;
|
|
102
|
+
if (magnitude < 1e21) {
|
|
103
|
+
return n === 0 ? 0 : n;
|
|
104
|
+
}
|
|
105
|
+
// NaN and the infinities write as names that read back as themselves.
|
|
106
|
+
if (Number.isNaN(n) || magnitude === Number.POSITIVE_INFINITY) {
|
|
107
|
+
return n;
|
|
108
|
+
}
|
|
109
|
+
return stringToNumber(convertDoubleToString(n));
|
|
110
|
+
}
|
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
// Numbers as avmplus writes them: MathUtils::convertDoubleToString and its
|
|
2
|
+
// digit generator, D2A (Burger and Dybvig's), translated as they are, since
|
|
3
|
+
// their output is AS3's and differs from JavaScript's: Number.MAX_VALUE is
|
|
4
|
+
// 1.79769313486231e+308, a denormal gets 17 digits, and toFixed rounds its
|
|
5
|
+
// own way. Also convertDoubleToStringRadix, which writes only the integer
|
|
6
|
+
// part.
|
|
7
|
+
//
|
|
8
|
+
// Translated from avmplus' core/MathUtils.cpp and core/d2a.cpp, this file is
|
|
9
|
+
// subject to the Mozilla Public License, v. 2.0: http://mozilla.org/MPL/2.0/.
|
|
10
|
+
export const DTOSTR_NORMAL = 0;
|
|
11
|
+
export const DTOSTR_FIXED = 1;
|
|
12
|
+
export const DTOSTR_PRECISION = 2;
|
|
13
|
+
export const DTOSTR_EXPONENTIAL = 3;
|
|
14
|
+
// avmplus' kLog2_10, 0.30102999566398119521373889472449, as the double it is.
|
|
15
|
+
const kLog2_10 = 0.3010299956639812;
|
|
16
|
+
const maxBase2Precision = 53;
|
|
17
|
+
const two_pow_52 = 2 ** 52;
|
|
18
|
+
const kPowersOfTen = [
|
|
19
|
+
1, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17,
|
|
20
|
+
1e18, 1e19, 1e20, 1e21, 1e22,
|
|
21
|
+
];
|
|
22
|
+
function quickPowTen(exp) {
|
|
23
|
+
return exp >= 0 && exp < 23 ? kPowersOfTen[exp] : 10 ** exp;
|
|
24
|
+
}
|
|
25
|
+
/** 10^exp exactly, as quickBigPowTen computes it for exp >= 0. */
|
|
26
|
+
function bigPowTen(exp) {
|
|
27
|
+
return 10n ** BigInt(exp);
|
|
28
|
+
}
|
|
29
|
+
const bits = new DataView(new ArrayBuffer(8));
|
|
30
|
+
/**
|
|
31
|
+
* As MathUtils::frexp on Unix: value = mantissa * 2^e, the mantissa an
|
|
32
|
+
* integer of 53 bits, normalized as C's frexp normalizes, denormals too.
|
|
33
|
+
*/
|
|
34
|
+
function frexp(value) {
|
|
35
|
+
if (value === 0 || !Number.isFinite(value)) {
|
|
36
|
+
return [0, value === 0 ? -53 : 0];
|
|
37
|
+
}
|
|
38
|
+
bits.setFloat64(0, Math.abs(value));
|
|
39
|
+
const hi = bits.getUint32(0);
|
|
40
|
+
const lo = bits.getUint32(4);
|
|
41
|
+
const exponent = (hi >>> 20) & 0x7ff;
|
|
42
|
+
let mantissa = (hi & 0xfffff) * 2 ** 32 + lo;
|
|
43
|
+
if (exponent !== 0) {
|
|
44
|
+
return [mantissa + two_pow_52, exponent - 1075];
|
|
45
|
+
}
|
|
46
|
+
// A denormal: frexp's fraction is still in [0.5, 1).
|
|
47
|
+
let e = -1074;
|
|
48
|
+
while (mantissa < two_pow_52) {
|
|
49
|
+
mantissa *= 2;
|
|
50
|
+
e--;
|
|
51
|
+
}
|
|
52
|
+
return [mantissa, e];
|
|
53
|
+
}
|
|
54
|
+
/** As avmplus' int32_t(value): a truncated int, or 0x80000000 when out of range. */
|
|
55
|
+
function toInt32Truncated(value) {
|
|
56
|
+
const t = Math.trunc(value);
|
|
57
|
+
return t >= -2147483648 && t <= 2147483647 ? t : -2147483648;
|
|
58
|
+
}
|
|
59
|
+
/** D2A: the digits of a positive double, one at a time. */
|
|
60
|
+
class D2A {
|
|
61
|
+
finished = false;
|
|
62
|
+
bFastEstimateOk;
|
|
63
|
+
base10Exp;
|
|
64
|
+
e;
|
|
65
|
+
mantissaPrec;
|
|
66
|
+
lowOk;
|
|
67
|
+
highOk;
|
|
68
|
+
dr = 0;
|
|
69
|
+
ds = 0;
|
|
70
|
+
dMPlus = 0;
|
|
71
|
+
dMMinus = 0;
|
|
72
|
+
r = 0n;
|
|
73
|
+
s = 0n;
|
|
74
|
+
mPlus = 0n;
|
|
75
|
+
mMinus = 0n;
|
|
76
|
+
constructor(value, fixedPrecision, minPrecision) {
|
|
77
|
+
const [mantissa, e] = frexp(value);
|
|
78
|
+
this.e = e;
|
|
79
|
+
if (fixedPrecision) {
|
|
80
|
+
this.lowOk = this.highOk = true;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const round = mantissa % 2 === 0;
|
|
84
|
+
this.lowOk = this.highOk = round;
|
|
85
|
+
}
|
|
86
|
+
let prec = maxBase2Precision;
|
|
87
|
+
while (prec !== 0 && Math.floor(mantissa / 2 ** --prec) % 2 === 0) {
|
|
88
|
+
// the leading zeroes
|
|
89
|
+
}
|
|
90
|
+
this.mantissaPrec = prec + 1;
|
|
91
|
+
const absE = e > 0 ? e : -e;
|
|
92
|
+
this.bFastEstimateOk = absE + this.mantissaPrec - 1 < 50;
|
|
93
|
+
if (this.bFastEstimateOk) {
|
|
94
|
+
if (e >= 0) {
|
|
95
|
+
const be = 2 ** e;
|
|
96
|
+
if (mantissa !== two_pow_52) {
|
|
97
|
+
this.dr = mantissa * be * 2;
|
|
98
|
+
this.ds = 2;
|
|
99
|
+
this.dMPlus = be;
|
|
100
|
+
this.dMMinus = be;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
const be1 = be * 2;
|
|
104
|
+
this.dr = mantissa * be1 * 2;
|
|
105
|
+
this.ds = 4;
|
|
106
|
+
this.dMPlus = be1;
|
|
107
|
+
this.dMMinus = be;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else if (mantissa !== two_pow_52) {
|
|
111
|
+
this.dr = mantissa * 2;
|
|
112
|
+
this.ds = 2 ** (1 - e);
|
|
113
|
+
this.dMPlus = 1;
|
|
114
|
+
this.dMMinus = 1;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
this.dr = mantissa * 4;
|
|
118
|
+
this.ds = 2 ** (2 - e);
|
|
119
|
+
this.dMPlus = 2;
|
|
120
|
+
this.dMMinus = 1;
|
|
121
|
+
}
|
|
122
|
+
if (fixedPrecision) {
|
|
123
|
+
const p = quickPowTen(minPrecision);
|
|
124
|
+
this.ds *= p;
|
|
125
|
+
this.dr *= p;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
const m = BigInt(mantissa);
|
|
130
|
+
if (e >= 0) {
|
|
131
|
+
const be = 1n << BigInt(e);
|
|
132
|
+
if (mantissa !== two_pow_52) {
|
|
133
|
+
this.r = (m << BigInt(e)) * 2n;
|
|
134
|
+
this.s = 2n;
|
|
135
|
+
this.mPlus = be;
|
|
136
|
+
this.mMinus = be;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
this.r = (m << BigInt(e)) * 4n;
|
|
140
|
+
this.s = 4n;
|
|
141
|
+
this.mPlus = be * 2n;
|
|
142
|
+
this.mMinus = be;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else if (mantissa !== two_pow_52) {
|
|
146
|
+
this.r = m * 2n;
|
|
147
|
+
this.s = 2n << BigInt(-e);
|
|
148
|
+
this.mPlus = 1n;
|
|
149
|
+
this.mMinus = 1n;
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
this.r = m * 4n;
|
|
153
|
+
this.s = 2n << BigInt(1 - e);
|
|
154
|
+
this.mPlus = 2n;
|
|
155
|
+
this.mMinus = 1n;
|
|
156
|
+
}
|
|
157
|
+
if (fixedPrecision) {
|
|
158
|
+
const p = bigPowTen(minPrecision);
|
|
159
|
+
this.s *= p;
|
|
160
|
+
this.r *= p;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
this.base10Exp = this.scale();
|
|
164
|
+
}
|
|
165
|
+
/** The next digit, or -1 once every relevant one is out. */
|
|
166
|
+
nextDigit() {
|
|
167
|
+
if (this.finished) {
|
|
168
|
+
return -1;
|
|
169
|
+
}
|
|
170
|
+
let low;
|
|
171
|
+
let high;
|
|
172
|
+
let quotient;
|
|
173
|
+
if (this.bFastEstimateOk) {
|
|
174
|
+
quotient = toInt32Truncated(this.dr / this.ds);
|
|
175
|
+
this.dr = this.dr % this.ds;
|
|
176
|
+
low = this.lowOk ? this.dr <= this.dMMinus : this.dr < this.dMMinus;
|
|
177
|
+
high = this.highOk ? this.dr + this.dMPlus >= this.ds : this.dr + this.dMPlus > this.ds;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
quotient = Number((this.r / this.s) & 0xffffffffn);
|
|
181
|
+
this.r = this.r % this.s;
|
|
182
|
+
low = this.lowOk ? this.r <= this.mMinus : this.r < this.mMinus;
|
|
183
|
+
high = this.highOk ? this.r + this.mPlus >= this.s : this.r + this.mPlus > this.s;
|
|
184
|
+
}
|
|
185
|
+
if (quotient < 0 || quotient > 9) {
|
|
186
|
+
quotient = 0;
|
|
187
|
+
}
|
|
188
|
+
if (!low) {
|
|
189
|
+
if (!high) {
|
|
190
|
+
if (this.bFastEstimateOk) {
|
|
191
|
+
this.dr *= 10;
|
|
192
|
+
this.dMPlus *= 10;
|
|
193
|
+
this.dMMinus *= 10;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
this.r *= 10n;
|
|
197
|
+
this.mPlus *= 10n;
|
|
198
|
+
this.mMinus *= 10n;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
quotient++;
|
|
203
|
+
this.finished = true;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
else if (!high) {
|
|
207
|
+
this.finished = true;
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
const under = this.bFastEstimateOk ? this.dr * 2 < this.ds : this.r + this.r < this.s;
|
|
211
|
+
if (!under) {
|
|
212
|
+
quotient++;
|
|
213
|
+
}
|
|
214
|
+
this.finished = true;
|
|
215
|
+
}
|
|
216
|
+
return quotient;
|
|
217
|
+
}
|
|
218
|
+
fixupExponentEstimate(estimate) {
|
|
219
|
+
if (this.bFastEstimateOk) {
|
|
220
|
+
if (this.highOk ? this.dr + this.dMPlus >= this.ds : this.dr + this.dMPlus > this.ds) {
|
|
221
|
+
return estimate + 1;
|
|
222
|
+
}
|
|
223
|
+
this.dr *= 10;
|
|
224
|
+
this.dMPlus *= 10;
|
|
225
|
+
this.dMMinus *= 10;
|
|
226
|
+
return estimate;
|
|
227
|
+
}
|
|
228
|
+
if (this.highOk ? this.r + this.mPlus >= this.s : this.r + this.mPlus > this.s) {
|
|
229
|
+
return estimate + 1;
|
|
230
|
+
}
|
|
231
|
+
this.r *= 10n;
|
|
232
|
+
this.mPlus *= 10n;
|
|
233
|
+
this.mMinus *= 10n;
|
|
234
|
+
return estimate;
|
|
235
|
+
}
|
|
236
|
+
scale() {
|
|
237
|
+
const base2Exponent = this.e + this.mantissaPrec - 1;
|
|
238
|
+
const estimate = Math.ceil(base2Exponent * kLog2_10 - 0.0000000001);
|
|
239
|
+
const abs = estimate > 0 ? estimate : -estimate;
|
|
240
|
+
if (this.bFastEstimateOk) {
|
|
241
|
+
const scale = quickPowTen(abs);
|
|
242
|
+
if (estimate >= 0) {
|
|
243
|
+
this.ds *= scale;
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
this.dr *= scale;
|
|
247
|
+
this.dMPlus *= scale;
|
|
248
|
+
this.dMMinus *= scale;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
const scale = bigPowTen(abs);
|
|
253
|
+
if (estimate >= 0) {
|
|
254
|
+
this.s *= scale;
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
this.r *= scale;
|
|
258
|
+
this.mPlus *= scale;
|
|
259
|
+
this.mMinus *= scale;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return this.fixupExponentEstimate(estimate);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
const ZERO = 0x30;
|
|
266
|
+
const DOT = 0x2e;
|
|
267
|
+
/**
|
|
268
|
+
* As MathUtils::convertDoubleToString, with the bug compatibility of SWF 15
|
|
269
|
+
* and later (bugzilla 513039, toFixed(0)), as avmshell runs.
|
|
270
|
+
*/
|
|
271
|
+
export function convertDoubleToString(input, mode = DTOSTR_NORMAL, precisionIn = 15) {
|
|
272
|
+
if (input === Number.POSITIVE_INFINITY) {
|
|
273
|
+
return "Infinity";
|
|
274
|
+
}
|
|
275
|
+
if (input === Number.NEGATIVE_INFINITY) {
|
|
276
|
+
return "-Infinity";
|
|
277
|
+
}
|
|
278
|
+
if (Number.isNaN(input)) {
|
|
279
|
+
return "NaN";
|
|
280
|
+
}
|
|
281
|
+
let value = input;
|
|
282
|
+
let precision = precisionIn;
|
|
283
|
+
if (mode === DTOSTR_NORMAL) {
|
|
284
|
+
const intValue = toInt32Truncated(value);
|
|
285
|
+
if (value === intValue && intValue !== -2147483648) {
|
|
286
|
+
return String(intValue);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
const buffer = [];
|
|
290
|
+
const negative = value < 0;
|
|
291
|
+
const zero = value === 0;
|
|
292
|
+
const noFraction = precision === 0;
|
|
293
|
+
const bugzilla513039 = true;
|
|
294
|
+
let round = true;
|
|
295
|
+
let s = 0;
|
|
296
|
+
if (negative) {
|
|
297
|
+
value = -value;
|
|
298
|
+
s++;
|
|
299
|
+
}
|
|
300
|
+
const d2a = new D2A(value, mode !== DTOSTR_NORMAL, precision);
|
|
301
|
+
let exp10 = d2a.base10Exp - 1;
|
|
302
|
+
const sentinel = s;
|
|
303
|
+
const put = (c) => {
|
|
304
|
+
buffer[s++] = c;
|
|
305
|
+
};
|
|
306
|
+
const kNormal = 0;
|
|
307
|
+
const kExponential = 1;
|
|
308
|
+
const kFraction = 2;
|
|
309
|
+
const kFixedFraction = 3;
|
|
310
|
+
let format;
|
|
311
|
+
switch (mode) {
|
|
312
|
+
case DTOSTR_FIXED:
|
|
313
|
+
if (exp10 < 0) {
|
|
314
|
+
format = kFixedFraction;
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
format = kNormal;
|
|
318
|
+
precision++;
|
|
319
|
+
}
|
|
320
|
+
break;
|
|
321
|
+
case DTOSTR_PRECISION:
|
|
322
|
+
format = exp10 < 0 ? kFraction : exp10 >= precision ? kExponential : kNormal;
|
|
323
|
+
break;
|
|
324
|
+
case DTOSTR_EXPONENTIAL:
|
|
325
|
+
format = kExponential;
|
|
326
|
+
precision++;
|
|
327
|
+
break;
|
|
328
|
+
default:
|
|
329
|
+
if (exp10 < 0 && exp10 > -7) {
|
|
330
|
+
if (exp10 < -precision) {
|
|
331
|
+
exp10 = -precision - 1;
|
|
332
|
+
}
|
|
333
|
+
format = kFraction;
|
|
334
|
+
}
|
|
335
|
+
else if (exp10 > 20) {
|
|
336
|
+
format = kExponential;
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
format = kNormal;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
let wroteDecimal = false;
|
|
343
|
+
switch (format) {
|
|
344
|
+
case kNormal: {
|
|
345
|
+
let digits = 0;
|
|
346
|
+
put(ZERO);
|
|
347
|
+
let digit = d2a.nextDigit();
|
|
348
|
+
if (digit > 0) {
|
|
349
|
+
put(digit + ZERO);
|
|
350
|
+
}
|
|
351
|
+
while (exp10 > 0) {
|
|
352
|
+
digit = d2a.finished ? 0 : d2a.nextDigit();
|
|
353
|
+
put(digit + ZERO);
|
|
354
|
+
exp10--;
|
|
355
|
+
digits++;
|
|
356
|
+
}
|
|
357
|
+
if (mode === DTOSTR_FIXED) {
|
|
358
|
+
digits = 0;
|
|
359
|
+
}
|
|
360
|
+
if (mode === DTOSTR_NORMAL) {
|
|
361
|
+
if (!d2a.finished) {
|
|
362
|
+
put(DOT);
|
|
363
|
+
wroteDecimal = true;
|
|
364
|
+
while (!d2a.finished) {
|
|
365
|
+
put(d2a.nextDigit() + ZERO);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
else if (digits < precision - 1) {
|
|
370
|
+
put(DOT);
|
|
371
|
+
wroteDecimal = true;
|
|
372
|
+
for (; digits < precision - 1; digits++) {
|
|
373
|
+
digit = d2a.finished ? 0 : d2a.nextDigit();
|
|
374
|
+
put(digit + ZERO);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
break;
|
|
378
|
+
}
|
|
379
|
+
case kFixedFraction: {
|
|
380
|
+
put(ZERO);
|
|
381
|
+
put(ZERO);
|
|
382
|
+
put(DOT);
|
|
383
|
+
wroteDecimal = true;
|
|
384
|
+
let digits = 0;
|
|
385
|
+
if (exp10 > 0) {
|
|
386
|
+
while (++exp10 < 10 && digits < precision) {
|
|
387
|
+
put(ZERO);
|
|
388
|
+
digits++;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
else if (exp10 < 0) {
|
|
392
|
+
if (bugzilla513039) {
|
|
393
|
+
while (exp10 < -1 && precision > 0) {
|
|
394
|
+
exp10++;
|
|
395
|
+
precision--;
|
|
396
|
+
put(ZERO);
|
|
397
|
+
}
|
|
398
|
+
if (precision === 0 && exp10 !== 0) {
|
|
399
|
+
round = false;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
while (++exp10 < 0 && precision-- > 0) {
|
|
404
|
+
put(ZERO);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
for (; digits < precision; digits++) {
|
|
409
|
+
if (d2a.finished) {
|
|
410
|
+
if (mode === DTOSTR_NORMAL) {
|
|
411
|
+
break;
|
|
412
|
+
}
|
|
413
|
+
put(ZERO);
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
put(d2a.nextDigit() + ZERO);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
exp10 = 0;
|
|
420
|
+
break;
|
|
421
|
+
}
|
|
422
|
+
case kFraction: {
|
|
423
|
+
put(ZERO);
|
|
424
|
+
put(ZERO);
|
|
425
|
+
put(DOT);
|
|
426
|
+
wroteDecimal = true;
|
|
427
|
+
if (!zero) {
|
|
428
|
+
for (let i = exp10; i < -1; i++) {
|
|
429
|
+
put(ZERO);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
let i = 0;
|
|
433
|
+
while (!d2a.finished) {
|
|
434
|
+
put(d2a.nextDigit() + ZERO);
|
|
435
|
+
if (mode !== DTOSTR_NORMAL && ++i >= precision) {
|
|
436
|
+
break;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
if (mode === DTOSTR_PRECISION) {
|
|
440
|
+
while (i++ < precision) {
|
|
441
|
+
put(d2a.finished ? ZERO : d2a.nextDigit() + ZERO);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
exp10 = 0;
|
|
445
|
+
break;
|
|
446
|
+
}
|
|
447
|
+
default: {
|
|
448
|
+
const digit = d2a.finished ? 0 : d2a.nextDigit();
|
|
449
|
+
put(digit + ZERO);
|
|
450
|
+
if ((mode === DTOSTR_NORMAL && !d2a.finished) || (mode !== DTOSTR_NORMAL && precision > 1)) {
|
|
451
|
+
put(DOT);
|
|
452
|
+
wroteDecimal = true;
|
|
453
|
+
for (let i = 0; i < precision - 1; i++) {
|
|
454
|
+
if (d2a.finished) {
|
|
455
|
+
if (mode === DTOSTR_NORMAL) {
|
|
456
|
+
break;
|
|
457
|
+
}
|
|
458
|
+
put(ZERO);
|
|
459
|
+
}
|
|
460
|
+
else {
|
|
461
|
+
put(d2a.nextDigit() + ZERO);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
// Rounding and truncation.
|
|
468
|
+
if (round && (d2a.bFastEstimateOk || mode === DTOSTR_FIXED || mode === DTOSTR_PRECISION)) {
|
|
469
|
+
if (d2a.nextDigit() > 4) {
|
|
470
|
+
for (let p = s - 1; p >= sentinel; p--) {
|
|
471
|
+
if (buffer[p] === DOT) {
|
|
472
|
+
continue;
|
|
473
|
+
}
|
|
474
|
+
buffer[p]++;
|
|
475
|
+
if (buffer[p] !== ZERO + 10) {
|
|
476
|
+
break;
|
|
477
|
+
}
|
|
478
|
+
buffer[p] = ZERO;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
if (mode === DTOSTR_NORMAL && wroteDecimal) {
|
|
482
|
+
while (buffer[s - 1] === ZERO) {
|
|
483
|
+
s--;
|
|
484
|
+
}
|
|
485
|
+
if (buffer[s - 1] === DOT) {
|
|
486
|
+
s--;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
// Clean up zeroes, and place the exponent.
|
|
491
|
+
if (exp10) {
|
|
492
|
+
let firstNonZero = sentinel;
|
|
493
|
+
while (firstNonZero < s && buffer[firstNonZero] === ZERO) {
|
|
494
|
+
firstNonZero++;
|
|
495
|
+
}
|
|
496
|
+
if (s === firstNonZero) {
|
|
497
|
+
put(ZERO + 1);
|
|
498
|
+
exp10++;
|
|
499
|
+
}
|
|
500
|
+
else if (!zero) {
|
|
501
|
+
let lastNonZero = s;
|
|
502
|
+
while (lastNonZero > firstNonZero && buffer[--lastNonZero] === ZERO) {
|
|
503
|
+
// the trailing zeroes
|
|
504
|
+
}
|
|
505
|
+
if (firstNonZero === lastNonZero) {
|
|
506
|
+
exp10 += s - firstNonZero - 1;
|
|
507
|
+
s = lastNonZero + 1;
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
put(0x65); // e
|
|
511
|
+
if (exp10 > 0) {
|
|
512
|
+
put(0x2b); // +
|
|
513
|
+
}
|
|
514
|
+
for (const c of String(exp10)) {
|
|
515
|
+
put(c.charCodeAt(0));
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
let len = s;
|
|
519
|
+
let start = sentinel;
|
|
520
|
+
if (buffer[sentinel] === ZERO && buffer[sentinel + 1] !== DOT) {
|
|
521
|
+
start = sentinel + 1;
|
|
522
|
+
len--;
|
|
523
|
+
}
|
|
524
|
+
if (negative) {
|
|
525
|
+
buffer[--start] = 0x2d; // -
|
|
526
|
+
}
|
|
527
|
+
if (bugzilla513039 && mode === DTOSTR_FIXED && noFraction && wroteDecimal) {
|
|
528
|
+
let p = start + len - 1;
|
|
529
|
+
while (buffer[p] !== DOT) {
|
|
530
|
+
p--;
|
|
531
|
+
}
|
|
532
|
+
len = p - start;
|
|
533
|
+
}
|
|
534
|
+
return String.fromCharCode(...buffer.slice(start, start + len));
|
|
535
|
+
}
|
|
536
|
+
/** As MathUtils::convertDoubleToStringRadix: the integer part only, in `radix`. */
|
|
537
|
+
export function convertDoubleToStringRadix(input, radix) {
|
|
538
|
+
let value = input;
|
|
539
|
+
const negative = value < 0;
|
|
540
|
+
if (negative) {
|
|
541
|
+
value = -value;
|
|
542
|
+
}
|
|
543
|
+
if (value < 1) {
|
|
544
|
+
return "0";
|
|
545
|
+
}
|
|
546
|
+
let out = "";
|
|
547
|
+
let uVal = Math.floor(value);
|
|
548
|
+
while (uVal !== 0) {
|
|
549
|
+
const j0 = uVal;
|
|
550
|
+
uVal = Math.floor(uVal / radix);
|
|
551
|
+
// In doubles, a "digit" of a large value can fall outside 0 to 35: as
|
|
552
|
+
// avmplus, truncate it to an int, then to a char read as Latin-1.
|
|
553
|
+
const j = j0 - uVal * radix;
|
|
554
|
+
const d = toInt32Truncated(j);
|
|
555
|
+
out = String.fromCharCode((j < 10 ? d + ZERO : d - 10 + 0x61) & 0xff) + out;
|
|
556
|
+
}
|
|
557
|
+
return negative ? `-${out}` : out;
|
|
558
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// What a host gives a runtime when it makes one, and what it does without.
|
|
2
|
+
/** Files that live as long as the runtime. */
|
|
3
|
+
export function memoryFiles() {
|
|
4
|
+
const files = new Map();
|
|
5
|
+
return {
|
|
6
|
+
read: (name) => files.get(name) ?? null,
|
|
7
|
+
write: (name, bytes) => {
|
|
8
|
+
files.set(name, bytes.slice());
|
|
9
|
+
return true;
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
/** Where output goes by default: the host's console. */
|
|
14
|
+
export function defaultPrint(line) {
|
|
15
|
+
globalThis.console?.log(line);
|
|
16
|
+
}
|