Commit Graph

176 Commits

Author SHA1 Message Date
Ray Redondo 167b5a45de avm2: move flash.display.IBitmapDrawable init 2021-09-11 15:47:20 -07:00
Ray Redondo 7f895473cb avm2: IBitmapDrawable stub 2021-09-11 15:47:20 -07:00
David Wendt a807cf7623 avm2: Stub `flash.display.BitmapData` & storage object 2021-09-11 12:11:35 -07:00
David Wendt 609b97cfb9 core: Allow `Bitmap`s to hold an AVM2 representation 2021-09-11 12:11:35 -07:00
Adrian Wielgosik 9bd0b624fd avm2: Add more Event class stubs and constants 2021-09-05 11:56:21 +02:00
David Wendt 8a58956f1f avm2: Add `flash.media.SoundChannel` class & associated object storage 2021-09-03 16:47:02 -06:00
David Wendt 0f625e7864 avm2: Impl `SoundMixer.soundTransform` class property 2021-09-03 16:47:02 -06:00
David Wendt 2f6e695483 avm2: Impl `Sprite.soundTransform` 2021-09-03 16:47:02 -06:00
David Wendt bd3cec0d20 avm2: Impl `flash.media.SoundTransform` 2021-09-03 16:47:02 -06:00
David Wendt 0c591f3370 avm2: Stub implementation of `Sound` and accompanying object type 2021-09-03 16:47:02 -06:00
David Wendt dba9b18540 avm2: Impl `Vector.concat` 2021-09-02 17:57:58 -06:00
David Wendt 4b021fe92c avm2: `Vector` lives in a separate package from other globals 2021-09-02 17:57:58 -06:00
David Wendt 7e71ecac16 avm2: Add stub impl of `Vector` 2021-09-02 17:57:58 -06:00
David Wendt 37af9be533 avm2: Implement `Font` for embedded fonts. 2021-08-30 17:53:39 -06:00
EmperorBale 2b748a4870 avm2: Implement getQualifiedClassName, getQualifiedSuperclassName, and getDefinitionByName 2021-08-29 20:41:20 -06:00
Adrian Wielgosik b5ee94aff1 avm2: Stub flash.system.Security. 2021-08-26 23:50:42 +02:00
lukaszN ee9e70b71f avm2: Initial rectangle impl 2021-08-23 15:44:14 -06:00
Ray Redondo 27e06af003
avm2: Initial MouseEvent stubs (#5065)
* avm2: Start MouseEvent stubs

* avm2: More MouseEvent work

* chore: clippy

* chore: fmt

Co-authored-by: Adrian Wielgosik <adrian.wielgosik@gmail.com>
2021-08-21 01:26:34 +02:00
Ray Redondo 22c6f7321e avm2: start flash.system.Capabilities stubs 2021-08-14 00:52:38 +02:00
EmperorBale 1dee1e4166 avm2: Implement flash.crypto.generateRandomBytes 2021-07-21 18:09:21 +02:00
David Wendt db86ca84b9 avm2: `get_property` does not mutate the underlying object (anymore) so it should not be flagged as mutably borrowing it. 2021-07-20 22:14:05 -04:00
David Wendt 8af0481a23 avm2: Retire the use of "constructor" outside of literal reference to class initializer or instance initializer code.
Instead, the following terms are used:

 * Static classes, to refer to `Class<'gc>`. Shortened to "class" in contexts where this is not ambiguous.
 * Class objects, to refer to objects that represent a particular class. Also shortened to "class" in non-ambiguous contexts.

Downstream of this, the `base_constr` (referring to the class that a currently called trait has been pulled from) is now called `subclass_object` and several `TObject` methods have also been renamed.
2021-07-20 22:12:23 -04:00
David Wendt b049f2e717 avm2: Rename `Method::from_builtin_only` to `Method::from_builtin` 2021-07-20 22:10:35 -04:00
David Wendt f5431a781e docs: Fix stale comments in avm2 2021-07-20 22:10:34 -04:00
David Wendt 9e997e6571 avm2: Split out `Method` and `Executable`'s native fork into `NativeMethod` and `NativeExecutable`, respectively.
This also implies renaming the existing type alias of the same name to `NativeMethodImpl`.
2021-07-20 22:10:33 -04:00
David Wendt 5018421eef avm2: Rename `SystemConstructors` to `SystemClasses` 2021-07-20 22:08:27 -04:00
David Wendt d0478a1f40 avm2: Allow builtins to also hold parameter type metadata.
This is limited by the fact that we currently cannot store type metadata in static tables. I don't think it's necessary to do so as of yet as pretty much every actual parameter type I *could* shove in here turned out to be optional and broke tests if it wasn't. Still, it's probably useful enough for new classes to include.
2021-07-20 22:05:36 -04:00
David Wendt 5c6c3191ef avm2: Enforce `final` on traits. 2021-07-20 22:02:09 -04:00
David Wendt c10a25fb3f avm2: Remove the special global constructor scope mode we added two commits ago. 2021-07-20 22:02:05 -04:00
David Wendt 377730301f avm2: Add a special object mode for `globals` so that it can get it's own scope during trait installation.
This is very wrong: Strictly speaking, we should not be instantiating anything that needs a scope when we install the trait. We just create a slot for it to go into. Script initializers are responsible for providing a scope stack to instantiate traits into.
2021-07-20 22:02:04 -04:00
David Wendt 5dcc3a58f2 avm2: Remove lazy trait initialization 2021-07-20 22:02:03 -04:00
David Wendt f84f01b2a5 avm2: Adjust the `FunctionObject` associated constructors so that there's a path that doesn't require the user hit `SystemPrototypes`.
Because we have stuff running in early globals, we stlil need a more elaborate version of this function that *does* take `fn_proto`. We also can't pull `scope` from the activation since this gets called to install traits.
2021-07-20 22:00:34 -04:00
David Wendt 602895e2de avm2: Make `RegExpObject::from_regexp` pull it's own constructor and call it's own initializer.
This doesn't appear to actually be in use, but I'm doing it for completeness' sake.
2021-07-20 22:00:32 -04:00
David Wendt 6fe44c3862 avm2: Clean up `ClassObject` initialization.
This also makes it more difficult to accidentally build a class without calling it's initializer. Native/builtin class initializers should also be running now, too.

The only minor bit of jank is that we need a class initialized bit to flag classes we've already run, because our current lazy-init design for traits causes classes to be constructed twice. This is temporary and I intend to remove it along with lazy-init traits.
2021-07-20 21:59:18 -04:00
David Wendt afd5a65a1e avm2: Create a new list of system constructors alongside the existing list of system prototypes. 2021-07-20 21:55:30 -04:00
David Wendt 323da9ded3 avm2: Move the class association from prototypes to instances.
This also incurred a large number of ancillary changes, as it turns out nearly every native object is currently pulling a prototype and sticking it into an object. Right now, I have it instead pulling the constructor out of the prototype, but a future PR will also remove `system_prototypes` as well.

Other ancillary changes include:

 * `Domain` now supports partial initialization to avoid an order-of-events issue. Accessing domain memory on a partially-initialized `Domain` will panic.
 * `Domain` construction requires a full `activation` now, except for `global_scope` which needs to be initialized later with valid domain memory before user code runs.
 * Pretty much every native object constructor now takes a proto/constr pair
 * Trait lookup was rewritten to handle this. It's still buggy - seven tests don't work
 * `TObject.construct` now actually does the full object construction dance. This allows `ClassObject` to implement the ES4 object construction pathway directly while `FunctionObject` maintains ES3 compatibility.

This is a tentative commit; there are still seven failing tests that I need to fix.
2021-07-20 21:55:25 -04:00
David Wendt f26f193508 avm2: Store instance derivers as a `Class` property instead of keeping them only as a globals concept 2021-07-20 21:47:00 -04:00
David Wendt 47de2364c1 avm2: Split `Class` and `Function` object types 2021-07-20 21:46:54 -04:00
EmperorBale 1ee61cca57
avm2: ByteArray updates 2021-06-22 01:26:27 -07:00
Mike Welsh 1304b2c55a avm2: Move Object properties to Object.prototype 2021-05-24 17:52:15 -07:00
David Wendt 22eac776be avm2: Stub `flash.display.SimpleButton` 2021-05-16 17:53:07 -07:00
David Wendt cffa739a54 avm2: Store the sprite proto 2021-05-16 17:53:07 -07:00
Adrian Wielgosik faa0e50e89 avm2: Unify NativeMethod and GenericNativeMethod 2021-05-06 10:54:33 -07:00
Mike Welsh 98befe678e avm2: Add flash.display.StageScaleMode and Stage.scaleMode 2021-04-26 01:15:42 -07:00
David Wendt 41fe51e9db avm2: Impl `flash.display.StageQuality` enum 2021-04-26 01:15:42 -07:00
David Wendt ae080fd65f avm2: Impl `flash.display.StageDisplayState` 2021-04-26 01:15:42 -07:00
David Wendt 98788ef194 avm2: Impl `flash.display.StageAlign` 2021-04-26 01:15:42 -07:00
David Wendt 81de112774 avm2: Add `Stage` class stub 2021-04-26 01:15:42 -07:00
David Wendt 5d198952e8 chore: Fix merge conflict mis-resolution 2021-04-05 16:18:37 -06:00
David Wendt 4eee8be911 avm2: Impl `SWFVersion` enumeration 2021-04-05 16:18:37 -06:00
David Wendt 4c314a47cc avm2: Impl `LoaderInfo.bytes` 2021-04-05 16:18:37 -06:00
David Wendt 1a7b33a1af avm2: Impl `ActionScriptVersion` 2021-04-05 16:18:37 -06:00
David Wendt fc26c26d1d avm2: Allow access to `loaderInfo` on root movies 2021-04-05 16:18:37 -06:00
David Wendt 60c92dde49 avm2: Add Loader Info class & object type 2021-04-05 16:18:37 -06:00
CUB3D 68527c13da avm2: Implement flash.utils.getTimer 2021-03-29 20:46:02 -06:00
David Wendt 9464a8800a avm2: Implement `CapsStyle` 2021-03-24 13:18:06 -07:00
David Wendt f7f98cc69e avm2: Implement `LineScaleMode` 2021-03-24 13:18:06 -07:00
David Wendt 582d2447cd avm2: Implement `JointStyle` 2021-03-24 13:18:06 -07:00
David Wendt 124e144d02 avm2: Add a class for `graphics` 2021-03-24 13:18:06 -07:00
David Wendt 1c2ef3154a avm2: Impl `TextFieldType` 2021-03-19 12:39:57 -07:00
David Wendt 3d8bf90794 core: Also allow converting `TextFormat` back into an AVM2 object. 2021-03-19 12:39:57 -07:00
David Wendt 3d2d2072af avm2: Impl `TextFormatAlign` 2021-03-19 12:39:57 -07:00
David Wendt a84acd55c3 avm2: Impl `TextFieldAutoSize` 2021-03-19 12:39:57 -07:00
David Wendt b6adc18c9c avm2: Impl `flash.text.TextFormat` 2021-03-19 12:39:57 -07:00
David Wendt f44e54246d avm2: Text fields on AVM2 movies should have AVM2 objects. 2021-03-19 12:39:57 -07:00
David Wendt b71286f1c4 avm2: Stub `flash.text.TextField` 2021-03-19 12:39:57 -07:00
Callum Thomson a570d96433
avm2: Implement flash.geom.Point (#3681) 2021-03-18 12:03:04 -07:00
EmperorBale b68eeeae26
avm2: Implement ByteArray 2021-03-05 15:01:02 -08:00
paq d866f73c5e avm2: Implement RegExp 2021-03-03 03:37:34 -08:00
David Wendt a5b4e168d3 avm2: Stub `flash.display.Shape`. 2021-03-03 03:08:01 -08:00
David Wendt ac6a206257 Fire `exitFrame`, `enterFrame`, and `frameConstructed` events as broadcasts. 2021-03-03 03:08:01 -08:00
David Wendt 3df97d8da2 avm2: Stub `System.gc`.
Our current garbage collector design precludes the ability to actually collect garbage during player updates, so this is a no-op.
2021-03-03 03:08:01 -08:00
CUB3D b93e556f89 avm2: Implement Op::Typeof and dummy XML/XMLList 2021-02-16 20:21:40 -08:00
David Wendt 02b94649c3 avm2: Stub the `Video` class. 2021-02-16 19:03:48 -08:00
relrelb bb89391f3a chore: Avoid deprecated constants
The Rust documentation considers numeric constants prefixed with std::
as deprecated.
For example: https://doc.rust-lang.org/std/u16/constant.MAX.html.
2021-02-12 06:36:17 -08:00
paq e9ad1587a4 chore: Rename Namespace::public_namespace to Namespace::public 2021-01-24 11:53:43 -08:00
paq 8baa36e801 avm2: Implement isFinite 2020-12-27 23:02:39 -08:00
paq ce2d7efac3 avm2: Implement isNaN 2020-12-27 23:02:39 -08:00
David Wendt b848e4c5ff avm2: Get rid of `RufflePrivate` and just use regular private namespaces scoped to our own domain. 2020-12-21 21:47:29 -08:00
David Wendt 584c6c8b11 avm2: Implement `Event.clone` 2020-12-14 16:46:33 -08:00
David Wendt 58f4470dc5 avm2: Add `Event` class, object type, and native representation 2020-12-14 16:46:33 -08:00
Mike Welsh 3ce8bc3c4b avm2: Implement Math 2020-11-12 04:24:47 -08:00
Mike Welsh b927acb2c2 avm2: trace accepts multiple arguments 2020-11-10 17:05:56 -08:00
David Wendt d27360b282 avm2: Enable lazy initialization for ABCs that request it. 2020-10-17 03:32:09 -07:00
David Wendt cdab885979 avm2: Implement `ApplicationDomain` and all methods that don't require `Vector` or domain memory 2020-10-17 03:32:09 -07:00
David Wendt 1792939212 avm2: Script scopes should hold the domains they are a part of.
Also, this means we have a `TObject` representation for domains now.
2020-10-17 03:32:09 -07:00
David Wendt 6a736b0d2b avm2: Wrap all player globals in a separate appdomain and script.
This entirely abolishes the "global scope object" in AVM2. I even had to redefine several global object functions to work with the bottom of the scope stack, which seems to be where ASC likes to stick the script scope.
2020-10-17 03:32:09 -07:00
David Wendt 02e05e3d7f Add separate scope object for each script. 2020-10-17 03:32:09 -07:00
David Wendt ef665acaec avm2: Movie clips not explicitly granted a `symbol_class` should be constructed using the `MovieClip` class directly 2020-10-06 06:03:22 -07:00
David Wendt d399811eb8 avm2: Allow `MovieClip` to be constructed by users. 2020-10-06 06:03:22 -07:00
David Wendt c682868205 avm2: Implement `MovieClip.currentScene` 2020-10-06 06:03:22 -07:00
David Wendt 8a13d5fe10 avm2: Implement `Scene` object. 2020-10-06 06:03:22 -07:00
David Wendt de186ed5f3 avm2: Implement `MovieClip.currentLabels` 2020-10-06 06:03:22 -07:00
David Wendt 77a86aef9b avm2: Implement `FrameLabel`. 2020-10-06 06:03:22 -07:00
David Wendt e72c9776ec avm2: Implement `IEventDispatcher`. 2020-10-06 06:03:22 -07:00
David Wendt f2380d828a chore: Don't capitalize our type arguments. 2020-09-15 02:20:11 -07:00
David Wendt 16e1a1bdf3 avm2: Add Array class.
This code also ensures that the prototypes of each system object are created in the appropriate `TObject` impl. This ensures that, for example, `new Array` hands you back an actual array.
2020-09-15 02:20:11 -07:00
Nathan Adams 3ff399ca6b core: Trace only to the log backend, but have the default log backend trace to the log crate 2020-09-13 13:51:39 -07:00
Nathan Adams 319efabb47 tests: Make tests capture trace output through new backend 2020-09-13 13:51:39 -07:00
Nathan Adams e25e03a841 core: Log to new avm_trace method where we want things to show up 2020-09-13 13:51:39 -07:00