Contains a shell trace test. While the test only excerts the player-internal implementation of the message sending machinery, it does test all the content-facing parts and all error handling. I verified that the implementation works as expected across browser tabs (within the same browser instance, of course) with Manual testing.
This is a __huge__ commit, because it's a squashed version of 777 individual commits. Taken together, they replace the vast majority of code in src/avm2 and much in src/avm1. Gone are the AVM2 JIT, the old interpreter, and huge amounts of code.
The new VMs (both AVM1 and AVM2) contain completely new implementations of the languages meta-object protocols and name resolution schemes that're much closer to what Flash is doing on a fundamental level, enabling better in-depth compatibility throughout.
Also, for AVM2 we have vastly improved test coverage, largely through importing the Tamarin test suite and a harness that runs that entire test suite in a ridiculous 25 seconds. Current pass rate: ~96.5%. (Compared to ~80% to 85% before all this.)
The original commits can, for the time being, be found in the [redux branch](https://github.com/mozilla/shumway/tree/redux).
Here's a somewhat-curated list of the individual commit messages of the commits that were squashed down to this:
Flash uses carriage return (\r) instead of line feed (\n) characters for new lines.
Implements AVM1 Array.shift/unshift.
Fix native linkage for flash.net.FileReference and .FileReferenceList
Add toString method to GFX's TextLine class to aid debugging
Disable AVM2 test that start failing on Apr 23, 2015.
Fixes mouse cursor.
Fixes AVM1 registers allocation.
Implement TextField::getLineText.
Fixes AVM1 ExternalInterface and external events handling.
Prevent infinite recursion in font symbol resolution
Add a grunt task to install a restartless version of the extension.
Fixes Sound symbol construction
Catch and work around NaN values flowing into SVGMatrix
"Work around" might be a bit of a strong word here ...
Add native class link for flash.text.TextSnapshot
The native doesn't actually implement a single method, but at least we get the exception a slight bit later.
Implement NOP and BKPT ops in the interpreter
They don't actually *do* anything, so this is more than trivial.
Test case for the interface conversions in multiple movies.
Fix `for each` iteration on Dictionaries
Adds FileLoadingSession type annotation to URLStream.
Fix bugs in handling device font symbols and registering fonts by symbol id
Bind resolver to the correct object in Font.registerEmbeddedFont
Fix extension by commenting out reference to Shumway.AVM2.Verifier
Use correct AXApplicationDomain in getDefinitionByName
Make AVMX execution tracing options available in the inspector and disable old, currently unused options
Fix start/stopDrag.
Check for an existing session before trying to close it in URLStream.
Initializes symbols during construction.
Properly derive current Application- and SecurityDomains in the pertaining getters
Fix NetStream events being dispatched with an undefined type.
Properly derive the class name for Error classes from the abc class definition instead of mucking with the template class's name
Replace all `false && super()` things in constructors with `super()`
We actually do want the super ctor called now.
Remove older src/flash/linker.ts file
Create TextRun instances in current SecurityDomain
Create SoundTransform object in current securityDomain in SoundChannel
Only send the data required for asset decoding when serializing decoding requests for images and fonts
Enables AVM1 stage-wide mouse events.
Refactors AsBroadcaster.
Refactors native AVM1 static usages.
Hoist recursive inner function out of deserializedObj in recorder.ts
Untangle all "fontOrImage" remoting stuff into individual messages for fonts and images
Refactors setting of the AVM1 root.
Refactors AVM1 event observer
Fix color matrix construction.
Update some signatures and some cleanup in flash.display, .text, and .utils
Update some signatures and some cleanup in flash.system
Update some signatures and some cleanup in flash.net
Update some signatures and some cleanup in flash.media
Box/unbox arrays going out of/into filter classes
Remove some Air-only getters (with unboxed-array signatures) from HTTPStatusEvent
Fix unit tests that work with unboxed arrays, and disable ones for now that fail for rounding errors
Fix unit test that fails now because expects unboxed arrays
Box returned array in DisplayObjectContainer#getObjectsUnderPoint
Unbox AXArrays in Graphics._writeGradientStyle and correctly scale the transform matrix
Properly link some natives in flash/link.ts
Unbox args array in NetStream#invokeWithArgsArray, and remove useless NetConnection#invokeWithArgsArray
Allow modification of properties on the dynamic prototype of sealed classes
Disable memory tool-related AVM2 acceptance tests
Disable sampling-related AVM2 acceptance tests
Disable Shell-related AVM2 acceptance tests
Disable Worker-related AVM2 acceptance tests
Disable float4-related AVM2 acceptance test
Store the default namespace on scope objects instead of always replacing a global value
Reset static XML state between files in the shell's JSON execution mode
Bugfixes in XML constructor and XML#insert
Implement XML#prependChild
Throw correct exception when XML#insert would create a cyclic graph
Implement XML#insertChildAfter and XML#insertChildBefore
Add TextField test case.
Run LZMA compressed swfs in the shell.
Fix JS shell path.
Assert that SharedObjectStorage is available.
Adds a automated mock tests for JWPlayer, this runs a considerable amount of player initialization code.
Make sure tests don't print timing information.
Polyfill session storage in the shell.
Set a default stage size in the shell.
Adds a coarse grained execution writer.
Port all ExternalInterface methods to ts
Tighten some method declarations on AXClass, plus cleanup
Remove old AVM2 runtime core, natives, interpreter, and bytecode normalizer
Changes trace tests run limit from actual time to micro task ticks.
Read default font from AX version of Font, not the original
Actually return the object created in Vector3D.Create
Only give non-native functions debug names instead of overriding native functions' original name, and fix error name assignment accordingly
Fix leaking of internal objects in ContextMenu
Loosen type annotation in ExternalInterface#convertFromXML
Don't just convert all the things to XMLList when we really want to coerce
Fix running abc files in the inspector
Explicitly apply symbol in embedded Bitmaps constructed from script rather than through timeline-placement
Reset filter array when reusing render state objects.
Fix calling functions with a null-receiver when no interpreted functions are on the stack
Make SharedObject work in AVMX
Fixes SharedObject.getLocal
Implements AVM1 Matrix; fixes AVM1Transform.
Fix bugs in ASJSON.stringify
Make sure not to duplicate texture dependencies in Shape parser
Stubs AVM1 SharedObject.
Implements AVM1 ColorTransform.
Implements AVM1 Rectangle.
Fixes AVM1MovieClip.lineStyle.
Fixes non-existent build/test folder problem during "gate".
Fixes asGetPublicProperty and removes axDefinePublicProperty.
Refactoring of the avm1ResolveVariable
Thread an environment containing the current ApplicationDomain through the entire system and use it to resolve symbols
Return false instead of throwing in ApplicationDomain#hasDefinition
Re-enable filters support in the gfx backend.
Associate every ABCFile with an environment, let that be a LoaderInfo in the SWF player, and use that to get to the correct chain of application domains for Loaders
This is finally an actual use of the ApplicationDomain system. It might even already work for loading child SWFs into their own domains.
Store applicationDomain on LoaderInfo and return it in getter
Fix initialization of ByteArrays from SWF-embedded symbols
Removes AVM1Context.lookupChild.
Fixes AVM1 String.lastIndexOf,.slice,.substr and .substring and chr
During build ensure "build" folder exists
Verify values when constructing AXArray instances from JS arrays
Catch and translate internal exceptions from constructing Arrays with non-index number as the only argument
Match Tamarin's absurd behavior in Array#push when the push would cause the array to be too large
Correctly implement String#localeCompare
Catch and convert into proper exceptions call stack overflows
Tamarin appears just not to create these - it consumes arbitrarily large arrays when calling Function#apply. JS engines don't, so we at least throw a proper internal error.
Removes system error from the ShellBinaryReader.
Implements members for AVM1 Object, Function, Boolean, Number
Install swfdec tests.
Disable some tests on travis.
Implement duplicateMovieClip
Rename test_avm2_pass to test_avm2_shumway and move run file to build/.
Add trace test for duplicateMovie.
Implement duplicateMovieClip.
Fix cloning graphics data.
Moves AVM1 assets registration code from the interpreter.
Protects from updating value from non-existent object
Implements AVM1 System.capabilities and .security
Implements AVM1 Point class.
Make RegExp.prototype is RegExp return true. Works for similar cases (e.g. Array) as well.
Fixes AVM1 constructor property.
Properly handle allocation overflow errors
Use correct receiver object in generic String methods
Fix up differences between JS and AS3 in how dates are stringified in Date#toString and #toDateString
Adds more cleaning; automated bisect script example.
Use custom tool to count totals for test_avm2_acceptance
Properly handle QNames in addition to strings in more places throughout the engine
Notably proxies, the `IN` operator, and, of course, some E4X sprinkled in.
Adds swfdec test to the travis
Use fully qualified names in native classes store
This is only relevant for MethodClosure, which is internal to `builtin.as`, and could collide with `public class MethodClosure`.
Ignore regexp syntax errors in all String methods
Correctly handle errors in converting values for loose equality operators
Fix a few bugs in our JSON implementation
Move isCallable function out of AXSecurityDomain and rename to axIsCallable
Fix linux sorting
Remove timeout option.
Disable versions_travis.
Removes travis's arch update
Adding i386 libs to travis.
Trying to install 32bit libs on travis.
Fixes AVM1 Sound object.
Fixes sound playback
Fix creation of AVM2 objects in some places in AVM1
Lots of bugfixes in the flash package
Adds `grunt clean`
Moves get/setAVM1Property to the interpreter.
Refactors AVM1 accessor properties usage.
Refactors AVM1TextFormat and AVM1BitmapData; removes AVM1Proxy
Use --gnu when pulling the || version.
Print tools version on travis.
Call listeners with the correct receiver in EventDispatcher.callListeners
Fix error handling in axCheckFilter
Fix subclassing of Array to create an internal `value` JS Array
Implement XML#setNamespace
The implementation isn't fully compliant, but close.
Implement XML#setLocalName
The implementation isn't fully compliant, but close.
Fix mangling for Multinames with a null local name
Fix some bugs in boxing of call receivers
Correctly handle non-callable callbackfn arguments in Array methods
Make sure not to leak the original array in Array#some and #map
Change initialization of AXFunction to use standard facilities instead of special stuff in AXSecurityDomain#initialize
Reinstate generic versions of RegExp-related String methods
Make Function#call and #apply work with null and undefined as receivers
By passing in the current script's global object instead.
Remove || --no-notice option since it appears to be failing on travis.
Make || behave like --gnu.
Adds AVM1 defineProperties
Proper type arguments of String methods that accept RegExps.
Coerce all untrusted arguments at adapter boundary
Minimize usage of the .wrappedJSObject
More RegExp fixes, more passing tests.
Install || on travis.
Fixes AVM1 Math natives
Run all tests in ||.
Enable passing swfdec tests.
Disables some of the swfdec tests.
Bugfixes to generic String methods
Ensure that we don't leak native arrays into AS3 and that we handle non-indexed properties correctly. This disables the descirbeJSON test because of some strange formatting issue that causes it not to diff correctly.
Makes String prototype methods generic
Make sure not to leak the original array in Array.prototype.forEach. We'll need to do this for all array methods.
Fix AMF bug caused by wrong iteration over Array keys.
Disables AVM1 exception reporting
Don't trip over NaN in the name-related assert in axSetPublicProperty
Prints default object's value for super's valueOf
Some more XML bug fixing
Makes the remaining two avm2/pass tests pass.
Fixes some trace tests: fps and fscommand(quit)
Fix a few describeType(JSON) issues
Removes currentTarget and defaultTarget from AVM1 context
Expose |argv| on the System class, this is used by pypy tests.
Remove invalid assertions, ABC files can have numeric property names in for non-runtime names.
Fix a few XML parsing error handling issues
Implement PUSHNAMESPACE op
Introduce a global stack of scope stacks that each function interpretation pushes its scope stack to
Implement support for sealed slots, i.e. const and class fields, which musn't be writable after initial definition
Fix handling of `finally` in the interpreter
Fix coercion of `message` argument in Error constructor
Mostly make describeType work again
Fixes tsc running on Windows.
Fixes avm1 SetVariable
Fixes alToString for toString that return self
Fixes wrapping of the non-existent native getters/setters
Implements AVM1 string methods: indexOf, slice, etc.
Fixes object conversion to string.
Fixes AVM1Function call/apply methods.
Making identifiers lower case for SWF6 and below
Implements Array.prototype.sort
Fixes arguments variable
Fixes AVM1 attachMovie.
Add pypy tests and grunt command.
Move pypy benchmarks.
Move sun spider tests and check in compiled versions.
Remove timeouts since they are somewhat unreliable and add benchmark grunt task.
Move some of the benchmark tests to the test folder.
Coerce value in axSetSuper just as in axSetProperty
Remove timezone-dependent test/avm2/pass/date-0
Don't mangle namespaces of innocent bystander multinames in XMLList#attributes()
Lots of bugfixes around handling of qualified names in E4X
Don't die when trying to coerce return value of void functions
Make sure we don't pass null or undefined as receiver for native function in generic String methods
Implement argument count checking and consolidate some exception handling
Don't load builtins.abc twice in the shell when running abc files
Some test shuffling to get rid of some of the "during op NEWCLASS: TypeError: superClass.dPrototype is not an object or ..."
Fix convertStringToDouble craziness.
Fix Interpreter writer flag.
Fix number toLocaleString
Rearrange some tests that were causing others to fail.
Fix indexOf / lastIndexOf
Fix maxBuffer for warning command.
Expose constants on Number, int and uint. This alone fixes nearly 1000 tests.
Fix handling of automatically-created DisplayObject IDs
Explicitly set the root SWFs url in Player#load, even if the loading happens from a buffer
This way, the SWF file can be loaded from a buffer, enabling better integration in the shell, and potentially loading sequence optimizations in the extension in the future.
Match Tamarin behavior on toLowerCase.
Fix date and integer handling in AMF
Load player globals in the inspector even if we run .abc files.
Implement AS3 behavior when stringifying undefined values.
More AMF fixes and test case.
Proper handling of invalid RegExp patterns and other fixes to make most of the redux RegExp tests pass.
Extracts AVM1 baseline compiler into separate file.
Refactors AVM1ScopeListItem usage
Implements AVM1InterpretedFunction
Some renaming, and removing lazy construction of arrays to make the code cleaner.
Fail fast when trying to run a non-existent SWF in the shell
Set a max value on the number of microTasks. This prevents exceptions from hanging the shell harness.
Don't die in FileLoader#processLoadClose if FileLoader#file is null
Store url field on FileLoader
Round intervals in the shell's task queue to the nearest multiple of 10 instead of fixing them all to MIN_INTERVAL
The fixing to `MIN_INTERVAL` breaks content because it causes events to be delivered in unexpected order. Same for timers: if I set timer `a` to be triggered in 50ms, and timer `b` in 10ms, timer `b` must be guaranteed to fire before `a`, even though it got registered later.
Extract IAVM1Context interface.
Removes Object.prototype reference from the AVM1Object base prototypes
Rename AVMX.SecurityDomain to AVMX.AXSecurityDomain
To avoid collisions with `flash.system.SecurityDomain`
Rename AVMX.ApplicationDomain to AVMX.AXApplicationDomain, and fix some usages
To avoid collisions with `flash.system.ApplicationDomain`
Fix tellTarget and add target.swf test
Fix native AVM1 object prototype chain (add.swf test)
Adds AVM1 Date native
Some AMF fixes, and remove date test case.
Fixes tracetest-swfdec running.
Fixes addProperty
Some cleanup of the grunt command.
Fixes AVM1 super.swf trace test.
Add grunt command to run archive tests.
Print correct file names for all results in warn_spell
Build playerglobals during `grunt build`
Removes AVM1Context.instance usages.
Adds case normalization for the AVM1 properties
Rename the `securityDomain` field to `sec` everywhere
Most annoying, but `securitDomain` collides with the use of `flash.system.SecurityDomain`. Also, we need to introduce `app`, for the internal ApplicationDomain, which would collide with `flash.system.ApplicationDomain`.
Implement enough of flash.system.ApplicationDomain and .SecurityDomain to make most exceptions caused by them go away
Small fixes to NetStream
Move all methods of NetConnection to TS, and somewhat-implement #close
Disable calls to the non-implemented internal method TextEvent#copyNativeData
Implement ESC_XATTR and ESC_XELEM opcodes
Add grunt command to run all mongodb avm2 swfs.
Disable tslint because it's too slow.
Fix non-determinisn in Date test, and avoid dumping too much trace data.
Implement some of the ApplicationDomain natives.
Fix bug in BitmapData.
Reenable test_swf_avm2, and add a warning task.
Don't use color diff in test_swf_avm2 command.
Remove more non-determinism by routing everyting to Date.now() which is overriden in the shell.
More renaming to .baseline and .run, and make parallels keep output order.
Cleanup testing.
Adds flag to run each .abc file in its own security domain.
Adds a way to create a new security domain by specifying @createSecurityDomain between two file names.
Renames all baseline files to .baseline
Renames all output runs to .run
Create a .baseline for avm2 tests even though it is generated each time. We could save time in the future if we omit building the baseline.
Moves a lot of previously failing tests to passing tests.
Fixes add.swf, setinterval.swf and settimeout.swf tests.
Fixed many REDUX TODOs in the flash and player packages
Change most asFoo names to axFoo, fix a few bugs while doing so, and ignore the remaining ones during spell check
Fix MOP calls in mp4mux.ts
Support null and undefined in Function#prototype setter
Fix String#toString and #valueOf functionality when applied to non-String objects
Provide a method to construct AXObject from JS Objects and replace wrapJSObject.
Fixes `grunt tracetest`
Adds AVM1 pac.swf as acceptance test
Refactoring of the AVM1 native interface.
Fix more exceptions to throw proper AXObject values
Properly handle Date methods being used on other receivers
Technically, the AS3 versions would behave differently, but that doesn't seem relevant to content - at least I wasn't able to reproduce failing cases in the authoring tool.
Change numeric MOP hooks on Vectors once again
Because contrary to everything else in EcmaScript and my implicit assumptions, Vectors throw `RangeError`s for non-integer numbers instead of treating them as non-index property names.
Don't call interpreted toString methods in interpreter logging
Because it can cause infinite recursions when the logged function is `toString`. Most annoying.
Bugfixes to Number, int, and uint methods
Fixes to numeric MOP hooks for Vector classes
Make applyType throw correct errors instead of asserting for invalid inputs
Bugfixes in Vectors
Initial AVM1 redux refactoring
Make dataBuffer.ts compile again
Small fixes to acceptance test failures
Properly handle various exceptions
Fix or comment-out code that was wrong from the beginning but looked ok because of lingering old interface members
Implement out-of-line exception handling in the interpreter
The interpreter's main loop should be as small as possible, so cluttering it up with type checks and exception handling isn't ideal. OTOH, lots of operations can throw JS exceptions, which we have to turn into AS3 ones before letting content script loose on them. This is achieved by calling a conversion function in the interpreter's `catch` block that takes the current Bytecode and values of various variables and returns a valid exception if it can. Otherwise it at least wraps the exception into a valid one so the internal one doesn't leak.
Implement Object#isPrototypeOf
Improve handling of namespaces in XML
Remove last vestiges of isTraitsOrdPrototype
Return proper AXObject in XML.defaultSettings
Throw proper exceptions when the lookup in callProperty & co fails
Show more columns in diff_test
More XML bugfixes
Simplify type checks in E4X classes
These are all final, so can do direct comparison with `foo.axClass`.
Lots of E4X bugfixes
Use proper AX objects for loader context parameters.
Get ExternalInterface to work.
Change Proxy#axCallProperty to properly pass in call args
Declare local var `name` in Multiname.FromSimpleName
Box result of String#split
Don't return raw JS (typed) arrays from Vector methods
Don't fail in IndentingWriter when trying to print `undefined` as multiple lines
Make sure that VM-internal exceptions don't just get rethrown in the interpreter's catch block
Run multiple .abcs in the inspector.
Throw on assigning to Getter and Method traits
Fix bug in Assert.as that caused some tests not to work, and disable some tests we won't support
Implement support for describeTypeJSON
We can now even implement reflection for MethodClosures properly.
Fix resolution of prototype
Run avm2 tests faster.
Make avmplus.System available everywhere, so tests work
This is a deviation from what Flash does, but the chances of it causing compatibility issues are very, very close to 0.
Fix JSON implementation
Cat failed and excepted acceptance tests.
Option to parse/scan only.
Implement support for flash.utils.Proxy
Revamp MOP handlers for clarity, sanity, and correctness
Ads SWF regression testing.
Adds a grunt command to run perf tests.
Give Function a dPrototype `value`
To make `Function.prototype()` and `typeof new Function()` work.
Coerce to property's type in setProperty
Run all other tamarin tests.
Grunt command for parsing tests.
Fix default value-filling and iteration for object vectors
Inline numeric addition in the interpreter and optimize isXML*Type checks
Update parallel command run by ats_parsetest grunt task.
Fix isType in Transform.
Ignore passed-in receivers in MethodClosure#call and #apply
Print exceptions nicely.
Fix get scenes();
Make diff_test tell you if files are identical
Use a hashing scheme that can be emulated in the flash player as well.
Box namespace default values.
Assert that constant values are valid AS3 values.
Use securityDomain.createArray instead of securityDomain.AXArray.axBox in various places
Don't use sliceArguments if it's not strictly required
Don't reuse _interpret's callargs for calling out to other functions
Because we don't clear them after initializing locals from them, and in preparation for having them optionally be IArguments, not Array
Add ignore and sample swfs.
Compute SWF checksum.
Print frame checksums in the shell.
Fix call and apply for MethodClosure
Fix toString
Implement and fix various native bare functions
Make diff_test script executable
Make acceptance test trace output more diffable
Fix AVM1 usage of fscommand after latest change to AVM2 version
Don't run the broken test_avm2_quick in `grunt avm2`
Fix resolution of metadata-less native bare functions and a bug in fscommand
Remove ActivationQueue in the extension.
Enables AVM1 in the shell.
Wire fscommand to AVM1.
Install native functions on the SecurityDomain
Ignore .idea folders.
Avoid infinite recursion in the findDefiningScript
Repurpose spell checker to give you warning about REDUX comments and other dangerous usages.
Enables AVM1 in the inspector.
From now on, run "grunt gate" before checking anything in.
Revert back to node_js.
Just use Java in the language field for travis.
Buildlibs on travis.
Running AVM1 code
Add compiled tests.
Warn about slow tests.
More tests.
Function#call and #apply with primitive thisArgs have to be called in the function's global
Remove duplicate test and add missing abc file for another
More tests and update baseline.
Update baseline.
Fixed sorting for vectors
Adds a custom test driver for tamarin tests, and checking against a baseline.
Retain created ObjectVector subclasses in the SecurityDomain, plus lots of cleanup and some stronger typing
Support the weird scheme by which Vector isn't the super-class of the specialized vectors, but typechecks pretend it to be
Add missing abc for type-6 avm2 test
Fix coercion for vectors and creation of ObjectVector subclasses
Upgrade tslint.
Don't lint helper debugger statement.
Fix lint errors.
Make reg-x tests pass again.
Add get/set global slot, but not tested yet.
Remove ||s timeout and move it to the shell.
Fix x_i opcodes.
Build proper object wrappers for global AVM1 object.
Misc RegExp fixes.
Properly handle primitives being thrown as exceptions
Pass securityDomain for AVM1 class wrappers
Move interface-2 to redux-pass
Give AXBasePrototype dummy runtime traits so lookups on Object.prototype succeed
Implement axConstruct for ASArray.
Add static parse and UTC methods.
Install avmshell in `grunt travis`
Check for super interfaces, too
Update jsshell to 2015-03-30 Nightly
Implement axApply for ASArray.
Move ASDate to its own file.
Extends AVM1 ISecurityDomain
Add callproplex.
Compiling AVM1 library
Add support for strange byte codes used by tamarin in the acceptance test suite.
Fix bug when printing null runtime namespaces. This makes nearly all acceptance tests parse correctly.
Implement interface type testing and return value coercion
Fix coercion in SETSLOT
Load ABC files in security domains before disassembling them.
Run tamarin acceptance tests.
Ignore traits properties during enumeration
Fix bugs im AMF en/decoding
Fall back to class-default values for primitive slots without a default value, and null for object-typed slots
Give Object a native constructor
Avoids calling an interpreted function for each and every object instantiation
Date tests.
Match undocumented behaviour of tamarin for x_i opcodes. Unfortunately, I can't test this because I can't get the compiler to generate these byte codes.
Implement ASRegExp.
Fix number constants.
Add Date functions.
Fix bounds for timeline-created SimpleButton instances
Fixing int/uint to run tests.
Fix various net- and media-related classes
Rename asTypeOf to axTypeOf
Implement INCLOCAL_I and DECLOCAL_I opcodes
Make class coercion properly deal with undefined and null
Fix MorphShape initialization
Fix coercion for class instances
Make JS->AS and AS->JS object conversions in StyleSheet work again
Install the JS shell on travis.
Fixes tsc for shell_ts build.
Fix SimpleButton, making mouse.js unit test pass
Build flash sources.
Fix tsc packaging and path in gruntfile.js
Define missing axClass properties on some filter classes
Move failing tests to the fail directory and fix filters bug.
Fix compiler errors and make grunt travis work.
Fixes mouse.js and graphics.js
More fixes to filter instance construction and related stuff
Fix invocation of native bare functions
This enables passing of ~ half of all SWF tracetests
More fixes to create proper AX instances
Fix creation of mouse events to use proper AX Point instances
Fix lots of wrongly constructed event instances
Register natives for flash.util functions
Create keyboard events in the target security domain.
Stub registerFontOrImageImpl in the shell.
Make MethodClosure extend Function and fix isFunction tests to work with boxed functions
Make ABCCatalog lookups work with non-qname Multinames
Fixes towards getting race3 working
Fix more vector bugs.
Move generic vector traps to a base vector class.
Fix numbers-0.as
Use loadAndExecuteABC instead of executeABC when running ABC blocks in the Loader
Make Player available through securityDomain and use it in all places that require access to the various interfaces it implements
Fix construction of some objects in flash.geom.Rectangle
Split field initialization out of constructors for symbol-constructible classes and run it from `applySymbol`
And other fixes to make SWFs successfully initialize (recursive) timeline-placed instances and run their ctors.
Enough fixes to get the first SWF to run without errors. Sadly, also without producing anything but a white stage
Add helper grunt command to run redux tests.
Fix bug in dictionary.
Many, many changes on the way to getting SWFs running
Copy over ASDate and ASRegExp
Add new test case.
Fix mouse issues.
Fix exceptions and parameter checks.
Fix enough things to get a SWF to start executing its script
Fix dragndrop.
Fix most of graphics.js unit test
Optionally make read-only descriptors writeable.
Fix stage.js unit test
Add symbol linking.
Fix MovieClip.js unit test
Fix issues in various JS unit tests
Get most of matrix3D.js unit test working
Assert that we don't inherit static properties.
Fix registration of natives with non-public namespaces and use it for Vector classes
Make jsGlobal.securityDomain available for unit tests running in the inspector
Fix enough of amf.ts to make bytearray.js unit test pass
Fix graphics.js unit test
Got more of graphics.js to work.
fix more of MovieClip.js
fix most of dragndrop.js unit test
fix propagation.js unit test
fix vector3D.js unit test
fix displayObjectContainer.js unit test
fix dispatch.js unit test
Fix most of bytearray.js unit test
Fix broadcastEvents.js unit test
Fix lots of issues in flash.display classes
Fix initialization of AVM2 Error classes
Fix LoaderInfo construction
Fix ASQName.FromMultiname
Fix up some constructors.
Pass axClass as this to classInitializers.
Fix lookup of XML.ignore* flags
Fix typeof
Add ability to get axClass from a class loader.
Fix detection of XML types and implement CHECKFILTER op
Fix Vector callable constructors
Fix E4X callable constructors
Implement axCallPublic.
Fixes to some builtins' definitions, plus small e4x stuff
Set traits as a read only property, and fix order in which properties are inherited from ASClasses.
Change (almost) all calls to throwError to use securityDomain.throwError
Fourth part of making E4X-related classes work
Third part of making E4X-related classes work
Changed all internally used names from ASQName to Multiname, fixed lots and lots and lots of sloppiness in how names were handled thus uncovered. More cleanup.
Second part of making E4X-related classes work
All `instanceof` tests are now replaced not by `this.securityDomain.AXFoo.axIsInstanceOf` but by `this.securityDomain.AXFoo.dPrototype.isPrototypeOf` tests. That is not only faster but also avoids problems with `Multiname` not being boxable.
More linking.
Fix inspector.
Cleanup catalog business and get more of the linking to work.
Get flash and shell to build under the new namespace, all code that failed to compile is marked with "REDUX:"
First huge part of making E4X-related classes work
Nothing really works yet, unfortunately. Things compile and no other tests are broken, though.
Move installation of dynamic prototype aliases of builtins' methods into classInitializers in nat.ts
Implement MethodClosure and don't box method traits
Remove stale, commented-out code from nat.ts
Introduces ASClass#classInitializer and calls it for natives to initialize their dynamic prototype methods
Install dynamic prototype versions of all of ASObject's methods
Fix toString for class prototypes
Install correct dynamic and AS3 toString and valueOf methods on all primitives' classes
Fix mangling of public namespaces with non-empty URIs
Fix Number#toString
Properly implement all String methods
Define default values on all primitives' prototypes
Because e.g. `Boolean.prototype` is a Boolean with the value `false`.
Make hasOwnProperty work for traits, too
Make RuntimeTraits#getTrait only deal with multinames whose `name` part is a string
This makes everything ugly, but I don't see a really good way around it. :(
Also adds implementations for `hasOwnProperty` and fixes a few bugs.
Make RuntimeTraits#indexOf only deal with multinames whose `name` part is a string
And fix a few bugs in the `Array` versions of a few MOP methods.
Implement COERCE_S op
Fix bugs in primitive coercion
Make scripted constructors work at all
By disabling the asserting constructor for native classes that we currently, invalidly, have
Implement GETSUPER and SETSUPER ops
Update uint and float64 vectors.
Revamp initialization and runtime usage of traits
The main points are that `protected` now works, without installing lots of additional properties (or aliases for the same property) in child classes, and that accessor properties are combined and defined in one go, so we don't have two `defineProperty` calls for r/w accessors.
Simple renaming, and get arrays to work again.
Move many of the handlers to the AS package.
Clean up protocol handlers.
Remove references to all code that is not part of the AVX package. I added asserts and TODOs wherever we need to fix things.
Simple renaming.
Partially implement exceptions, errors and apply type.
Started to implement vectors.
Fix bug in data buffer.
Implement byte arrays.
Use TS constructor as the initializer.
Port dictionary.
Skip over traits prototype and hide prototype functions.
Implement in.
Fix public mangled name bug, and implement convert_s.
Move meta object protocol handlers to nat.
Implement iterators.
Implement rest and arguments.
Fix parsing and handling of Namespaces
These work somewhat differently to how we tried to use them before.
Marks Traits instance as resolved instead of iterating over all contained traits over and over again
Always pass a Trait kind to getTrait and traits.indexOf
Starting to cleanup nat.
Fix parsing of default values.
Cleans up boxing and implements delete property,
Implement default properties.
Merge and expose constructor property.
Implement CALLSUPER and CALLSUPERVOID ops
Fix bugs in the core inheritance chain
Make sure traits are resolved so indexOf works.
Attempt at documenting prototype data structure, not quite accurate yet.
Rename proto to prototype.
Move default class prototype methods to the default prototype.
Install default axConstruct and axInitializer on the AXClassPrototype object.
Fix bug that caused findScopeProperty to not find dynamic properties of the global for strict lookups
Remove some indirections in Multiname mangling for public names
We're using `$Bg` as a fixed prefix in lots of places by now, so might as well also do it in these really performance-critical ones.
Makes AXClass a proper AXObject
And a whole lot more: lots of cleanup in SecurityDomain initialization; introduction of `asBox` method on classes that's used for internal boxing in lieu of classes being constructible by themselves; commoning out of MOP hooks into the system-wide AXBaseProto.
Lets a staggering amount of additional tests pass. Well, two.
Implement PUSHWITH op
Fix implementations of Array#sort and #sortOn
Implement construct super.
Fix implementations of Array#sort and #sortOn
At least as far as I can test them: `Array.NUMERIC` & co seem not to resolve properly right now.
Call the static initializer.
Put get/set slot on AXObject prototype.
Make ClassTraits inherit from SlotTraits since they have slot IDs.
Don't save the abc reference on Traits objects, each trait needs it's own ABC reference since multiple traits may be pooled together from multiple ABCs.
Implement lookup switch and remove time tracing from the shell.
Drastically reduce runtime of functions-1 and obj AVM2 tests
Running those hundreds of thousands of time tests nothing except for the developer's patience.
Introduce AXCallable interface, make both AXFunction and JS Function implement it, and use it for toString and valueOf forwarding
Implement mode of the type checking, coerce-0 passes now.
Implement toString and valueOf as forwarders to the $Bg versions on all AXObjects and classes
Change NEWOBJECT op to return an instance of securityDomain.AXObject instead of a JS object
Move code out of the big closure that is SecurityDomain#initialize
Remove all usage of Object.setPrototypeOf from AX system
More correctly implement AXArray methods
By initializing the `AS3::` versions on `ASArray.prototype` and then aliasing them to the `public` namespace.
Fix axConstruct for primitive types.
Revert change to isRuntimeName and implement primitive casting.
Redux: implement remaining Array methods
... and install them in the public namespace. AS3 namespace doesn't yet work.
Bugfixes and much-improved readility for _parseMultiname
_Please_ don't use the most cryptic var names you can think of.
In CALLPROP*, store receiver in a var for easier debugging
Implement IFSTRICTEQ and IFSTRICTNE
Implement all straight-forward boolean and algebraic operators
More natives.
Fix offsets.
Box primitive types.
Bytecode definitions.
Lazify parser.
Adds a way to trace call execution.
- Defines separate set on functions for gfx and player
- Defines RtmpXHR/RtmpSocket interfaces
- Replaces function exports with cloneInto
- Replaces callback properties with setXXXXCallback listeners
Makes it easier to see how much time we spend in the beginning not doing much of anything: first something like 250ms before the timeline even starts, then another 75ms or so until we parse our first ABC file.