Rewrite of most of the AVM2 component, the core of the AVM1#2155
Conversation
|
/botio reftest |
From: Bot.io (Main)ReceivedCommand 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.
From: Bot.io (Main)SuccessFull output at http://areweflashyet.com:8081/14a5444cdf52de7/output.txt Total script time: 6.07 mins
|
|
/botio reftest |
From: Bot.io (Main)ReceivedCommand cmd_reftest from @tschneidereit received. Current queue size: 0 Live output at: http://areweflashyet.com:8081/815bc15d137b93a/output.txt |
From: Bot.io (Main)SuccessFull output at http://areweflashyet.com:8081/815bc15d137b93a/output.txt Total script time: 6.09 mins
|
Rewrite of most of the AVM2 component, the core of the AVM1
|
/botio test |
From: Bot.io (Main)ReceivedCommand cmd_test from @yurydelendik received. Current queue size: 0 Live output at: http://areweflashyet.com:8081/66a440af79770af/output.txt |
From: Bot.io (Main)FailedFull output at http://areweflashyet.com:8081/66a440af79770af/output.txt Total script time: 12.35 mins
|
|
/botio test |
From: Bot.io (Main)ReceivedCommand cmd_test from @yurydelendik received. Current queue size: 0 Live output at: http://areweflashyet.com:8081/b234582b1184a2a/output.txt |
From: Bot.io (Main)SuccessFull output at http://areweflashyet.com:8081/b234582b1184a2a/output.txt Total script time: 12.94 mins
|
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: