Skip to content
This repository was archived by the owner on Jul 3, 2019. It is now read-only.

Rewrite of most of the AVM2 component, the core of the AVM1#2155

Merged
tschneidereit merged 1 commit into
mozilla:masterfrom
tschneidereit:master
Apr 23, 2015
Merged

Rewrite of most of the AVM2 component, the core of the AVM1#2155
tschneidereit merged 1 commit into
mozilla:masterfrom
tschneidereit:master

Conversation

@tschneidereit
Copy link
Copy Markdown
Contributor

Plus lots of other changes to adapt to said rewrites.

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.

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.
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.

@tschneidereit
Copy link
Copy Markdown
Contributor Author

/botio reftest

@shumway-bot
Copy link
Copy Markdown
Contributor

From: Bot.io (Main)


Received

Command cmd_reftest from @tschneidereit received. Current queue size: 0

Live output at: http://areweflashyet.com:8081/14a5444cdf52de7/output.txt

…s of other changes to adapt to said rewrites

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.
@shumway-bot
Copy link
Copy Markdown
Contributor

From: Bot.io (Main)


Success

Full output at http://areweflashyet.com:8081/14a5444cdf52de7/output.txt

Total script time: 6.07 mins

  • Lint: Passed
  • Reference tests: Passed
  • Trace tests: Passed

@tschneidereit
Copy link
Copy Markdown
Contributor Author

/botio reftest

@shumway-bot
Copy link
Copy Markdown
Contributor

From: Bot.io (Main)


Received

Command cmd_reftest from @tschneidereit received. Current queue size: 0

Live output at: http://areweflashyet.com:8081/815bc15d137b93a/output.txt

@shumway-bot
Copy link
Copy Markdown
Contributor

From: Bot.io (Main)


Success

Full output at http://areweflashyet.com:8081/815bc15d137b93a/output.txt

Total script time: 6.09 mins

  • Lint: Passed
  • Reference tests: Passed
  • Trace tests: Passed

tschneidereit added a commit that referenced this pull request Apr 23, 2015
Rewrite of most of the AVM2 component, the core of the AVM1
@tschneidereit tschneidereit merged commit 97632ae into mozilla:master Apr 23, 2015
@yurydelendik
Copy link
Copy Markdown
Contributor

/botio test

@shumway-bot
Copy link
Copy Markdown
Contributor

From: Bot.io (Main)


Received

Command cmd_test from @yurydelendik received. Current queue size: 0

Live output at: http://areweflashyet.com:8081/66a440af79770af/output.txt

@shumway-bot
Copy link
Copy Markdown
Contributor

From: Bot.io (Main)


Failed

Full output at http://areweflashyet.com:8081/66a440af79770af/output.txt

Total script time: 12.35 mins

  • Lint: Passed
  • Reference tests: Passed
  • Trace tests: Passed
  • AVM2 tests: FAILED
  • AVM1 trace tests: Passed
  • Perf tests: Passed

@yurydelendik yurydelendik mentioned this pull request Apr 23, 2015
@yurydelendik
Copy link
Copy Markdown
Contributor

/botio test

@shumway-bot
Copy link
Copy Markdown
Contributor

From: Bot.io (Main)


Received

Command cmd_test from @yurydelendik received. Current queue size: 0

Live output at: http://areweflashyet.com:8081/b234582b1184a2a/output.txt

@shumway-bot
Copy link
Copy Markdown
Contributor

From: Bot.io (Main)


Success

Full output at http://areweflashyet.com:8081/b234582b1184a2a/output.txt

Total script time: 12.94 mins

  • Lint: Passed
  • Reference tests: Passed
  • Trace tests: Passed
  • AVM2 tests: Passed
  • AVM1 trace tests: Passed
  • Perf tests: Passed

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants