Mike Welsh
f2d31b222b
core: Implement DefineButtonCxform SWF tag
...
(Although nothing uses this... it was only used in SWF version 2
and below!)
2019-12-20 19:20:25 -08:00
dependabot-preview[bot]
e8e0b83d23
build(deps): bump smallvec from 1.0.0 to 1.1.0
...
Bumps [smallvec](https://github.com/servo/rust-smallvec ) from 1.0.0 to 1.1.0.
- [Release notes](https://github.com/servo/rust-smallvec/releases )
- [Commits](https://github.com/servo/rust-smallvec/compare/v1.0.0...v1.1.0 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-12-20 22:36:07 +00:00
Mike Welsh
4026e22bbf
core: Handle DefineButtonSound SWF tag
...
This plays sounds whenever a button is hovered/clicked. Fixes
gun sounds in Pico's School.
2019-12-20 01:08:28 -08:00
Mike Welsh
d459bbe010
avm1: Functions store their base clip
...
Functions now store their base clip (the code that contains the
executing bytecode). This is because `GotoFrame` and other actions
will execute on the clip the bytecode exists on, not on `this`.
(Note that `this.gotoAndStop` uses `GetMember` actions, which
worked correctly).
`Activation` now stores `target_clip`, and `Avm1::target_clip` and
`target_clip_or_root` grab this from the current stack frame.
Renamed `start_clip` to `base_clip` to match Flash conventions.
Removed `active_clip` as this was superfluous. Now you can use
`Avm1::target_clip_or_root`.
`UpdateContext` no longer contains `target_clip` etc.
2019-12-19 17:30:50 -08:00
Mike Welsh
c4b446ff78
tests: Add test for functions closing over base clip
2019-12-19 17:30:50 -08:00
Mike Welsh
13c43ed171
tests: Update movieclip_hittest to verify points are in root coordinates
2019-12-19 12:35:56 -08:00
Mike Welsh
540b03090a
avm1: hitTest point is actually in root coordinates ( fix #185 )
2019-12-19 12:35:56 -08:00
Nathan Adams
f6f358b4de
avm1: Expose TextFields and allow setting their .text
2019-12-19 10:19:43 -08:00
Mike Welsh
c9a5d2dbb3
chore: Fix clippy lints in 1.40
2019-12-19 09:10:41 -08:00
Nathan Adams
d3848f97ea
avm1: Implemented MovieClip.hittest, without shape flag
2019-12-18 15:21:14 -08:00
Nathan Adams
5f6eea6f25
chore: Refactor system listeners into a reusable system
2019-12-18 15:15:56 -08:00
Mike Welsh
3a8256a993
avm1: Allow setting _name
2019-12-18 14:07:32 -08:00
Mike Welsh
9079b69991
avm1: Push Undefined when trying to construct invalid object
2019-12-18 13:47:01 -08:00
Mike Welsh
bb6a4c119c
avm1: Warn and clear operand stack if not empty after execution
...
Add a check and clear the stack if it isn't empty at the end of
`run_stack_till_empty`. This is probably a bug on our side
and we a good place for breakpoints.
2019-12-18 13:47:01 -08:00
Mike Welsh
8b9aedc4c8
avm1: Fix extra stack frame in event handlers
...
When running an clip event handler (e.g. onEnterFrame), a stack
frame is pushed to get the property value. However, this frame
was causing an extra Undefined to be pushed on the operand stack in
`Avm1::retire_stack_frame`, which would blow out the stack.
Now this stack frame is popped after the property is resolved and
before the function is executed. The function will push its own
stack frame when it executes.
2019-12-18 13:47:01 -08:00
Mike Welsh
3e003ed9dd
avm1: Add missing stage.rs
2019-12-17 22:36:53 -08:00
Mike Welsh
3ebc1ed928
avm1: Stub out Stage properties
...
This is a very rough stub out of Stage.width and height to get
basic V-cams to start functioning.
TODO: Implement the different stage scaling modes. We will probably
want to add a "Stage" display object to handle this.
2019-12-17 22:28:44 -08:00
Mike Welsh
2af76e10f8
core: Mark scale/rotation as dirty when matrix changes
2019-12-17 22:06:34 -08:00
Mike Welsh
74aa127b74
avm1: Fix double borrow in Executable::exec
2019-12-17 21:35:22 -08:00
Mike Welsh
32953d5c5c
avm1: Allow objects in ActionSetTarget2
...
Fixes 8-Bit Theater 3 soft locking on the first frame.
2019-12-17 18:32:25 -08:00
Mike Welsh
a9baf72c53
avm1: Handle trailing / in slash paths
2019-12-17 04:00:01 -08:00
Mike Welsh
28faf2030b
tests: Add failing case to slash_syntax test
2019-12-17 04:00:01 -08:00
Mike Welsh
dae3e27fb3
avm1: Rename Library::instantiate_by_id
2019-12-17 03:27:05 -08:00
Mike Welsh
fc3878d6d9
tests: Add tests for movie clip cloning/removing
2019-12-17 03:20:01 -08:00
Mike Welsh
1476930e0c
avm1: Implement MovieClip.removeMovieClip
2019-12-17 03:20:01 -08:00
Mike Welsh
1668e823e6
avm1: Implement MovieClip.createEmptyMovieClip
2019-12-17 03:02:07 -08:00
Mike Welsh
d33a8278d7
avm1: Implement MovieClip.duplicateMovieClip
2019-12-17 03:00:56 -08:00
Mike Welsh
009da39f12
avm1: Implement MovieClip.attachMovie
2019-12-17 03:00:56 -08:00
Mike Welsh
d0504104b7
core: Use i32 for display object depth
2019-12-17 02:48:55 -08:00
Mike Welsh
4cb2cefc5b
swf: Switch depth to u16
2019-12-17 02:48:55 -08:00
Mike Welsh
0f3bad8f1b
core: Wrap Font in a Gc
2019-12-17 02:48:55 -08:00
Mike Welsh
289e0b8aff
core: Handle ExportAssets SWF tag
2019-12-16 19:32:34 -08:00
Mike Welsh
b6df9fded0
core: Remove boxes from library items
2019-12-16 19:32:34 -08:00
Nathan Adams
45e497826b
avm1: Implement `Mouse` listeners & events (excluding scroll)
2019-12-16 19:22:10 -08:00
Mike Welsh
c2f4633cdb
avm1: Trace constant_pool in Collect for Activation
2019-12-16 16:14:49 -08:00
Mike Welsh
c61842a72a
tests: Add test for slash syntax
2019-12-16 15:33:57 -08:00
Mike Welsh
f270a278c0
avm1: Push Undefined on GetVariable with invalid slash path
2019-12-16 15:33:16 -08:00
Mike Welsh
8b85212513
avm1: Handle .. in slash syntax
2019-12-16 15:24:25 -08:00
Mike Welsh
f4f755e958
avm1: Remove warnings on _currentframe/_totalframe
2019-12-16 10:21:37 -08:00
Nathan Adams
84ff69854a
avm1: Pass mouse events down to movie clips
2019-12-16 10:11:23 -08:00
Nathan Adams
c8e42123cf
avm1: Implemented `_xmouse` and `_ymouse`
2019-12-16 10:11:23 -08:00
Nathan Adams
783037e8cc
chore: Removed array debug code that snuck in. Oops!
2019-12-16 09:56:46 -08:00
Mike Welsh
e4af2502dc
avm1: Fix mismatched action/init_action stack frames
...
DoAction was accidentally creating its stack frame using
Avm1::insert_stack_frame_for_init_action, causing a dummy
Undefined to be pushed and blowing out the stack.
2019-12-16 01:14:06 -08:00
Mike Welsh
b2cdc19f55
tests: Add test for goto MovieClip methods
2019-12-16 00:52:27 -08:00
Mike Welsh
bf0b777246
avm1: Use ECMA-262 ToInt32 modulo behavior
...
Everything is a double in ES land, so when converting a number to
int, the double is modulo'd to allow for wrapping 32-bit int
semantics.
See ToInt32 and ToUInt32 in the specs:
https://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%202nd%20edition,%20August%201998.pdf
2019-12-16 00:52:27 -08:00
Mike Welsh
39f54b4a16
avm1: Add gotoAndPlay and gotoAndStop MovieClip methods
2019-12-16 00:52:27 -08:00
Mike Welsh
a3e316847b
core: Clamp goto frame in range
2019-12-16 00:52:27 -08:00
Mike Welsh
fa5a168fad
avm1: Clean up MovieClip prototype
2019-12-16 00:52:27 -08:00
Mike Welsh
46365c5702
avm1: Implement clip event method callbacks
2019-12-15 20:01:50 -08:00
Mike Welsh
eb3aa1c878
core: Move `ClipAction` into crate::events
2019-12-15 19:22:23 -08:00
Mike Welsh
1fe170400c
tests: Add clip_events regression test
2019-12-15 19:22:23 -08:00
Mike Welsh
76e94dda1c
core: Implement "unload" clip event
...
Fire unload clip event when a movie clip is removed. Added
`ActionType` enum used by `ActionQueue::queue_actions` that
determines the type of action that is running (replaces `is_init`
parameter).
2019-12-15 19:00:16 -08:00
Mike Welsh
38ebdd9d05
core: Fire "load" and "enterFrame" clip events
...
MovieClips will now fire their "load" and "enterFrame" clip events.
Added `MovieClipFlags` to store various flags for the movie clip.
2019-12-15 19:00:16 -08:00
Mike Welsh
174426856f
avm1: Use `EnumSet::from_bits` in `object::as_set_prop_func`
2019-12-15 14:26:43 -08:00
David Wendt
d9aac0f2cf
Adjust `SuperObject` based on actual Flash behavior.
2019-12-15 13:32:04 -08:00
David Wendt
edf7a19eb7
Implement `Function.prototype.toString`.
2019-12-15 13:32:04 -08:00
David Wendt
33c66571f5
Allow `is_instance_of` to inspect the prototype chains of implemented interfaces.
...
This makes the `extends_chain` test pass.
2019-12-15 13:32:04 -08:00
David Wendt
854526923e
Calls to `super` inherently bind to itself.
...
This requires some subclassing nonsense to be able to smuggle a self-reference into `SuperObject`s. When successfully smuggled, all calls to `call` will be invoked with the `super` object as `this`. This allows constructor chaining to work.
Note that not all `Object` trait methods are implemented on `SuperObject`, so things like `delete this.x` in super constructors will randomly fail. This should be fixed.
2019-12-15 13:32:04 -08:00
David Wendt
548f19ffbb
`ActionExtends` uses the class's explicit prototype, not it's implicit prototype which should almost always be `Function.prototype`.
2019-12-15 13:32:04 -08:00
David Wendt
eb06501492
Since `get_local` doesn't scale the prototype chain anymore, we don't need to change the prototype chain traversal anymore.
2019-12-15 13:32:04 -08:00
David Wendt
e08cfcd288
Enable the `as2-oop` test since it now passes.
2019-12-15 13:32:04 -08:00
David Wendt
5c1ac19c1b
Implement `super`, mostly.
...
We implement `super` by way of a new `Object` impl which wraps arbitrary objects with a modified prototype chain. Specifically, the lowest layer of the prototype chain is omitted. This new `SuperObject` script is composable: a chain of two `SuperObject`s will go two levels of inheritance upwards while still maintaining non-prototype property access.
2019-12-15 13:32:04 -08:00
David Wendt
681b4adfa4
Functions close over the constant pool they were defined with.
2019-12-15 13:17:41 -08:00
David Wendt
71d9655f6d
Implement `ASSetPropFlags`
2019-12-15 13:17:41 -08:00
David Wendt
d173e91de6
AS2 OOP test. This won't actually pass until we have interfaces, init actions, and constant pool closures merged in. Hence, it's ignored.
2019-12-15 13:17:41 -08:00
David Wendt
213b3cfca1
Store implemented interfaces on the prototype, not the constructor, so that InstanceOf can get at them.
2019-12-15 13:17:41 -08:00
David Wendt
fcb37bd273
Implement `ActionCastOp`.
2019-12-15 13:17:41 -08:00
David Wendt
1b459f522d
Implement `ActionImplementsOp`.
...
This commit title has won the "World's Lowest-Entropy Commit Title" award for 2019.
2019-12-15 13:17:41 -08:00
David Wendt
ee4b47d062
Add interface support, and add interface checking to `ActionInstanceOf`.
2019-12-15 13:17:41 -08:00
David Wendt
ca93bba5c1
Implement ActionExtends.
2019-12-15 13:14:21 -08:00
Mike Welsh
81e5c7ba1d
core: Rename get_length etc. -> length
2019-12-15 12:33:24 -08:00
Mike Welsh
bc42004db5
core: Implement From for Object variants to Value/ReturnValue
2019-12-15 12:33:24 -08:00
Nathan Adams
133a1c3c91
core: Interacting with memebers on something that isn't an object isn't a hard error
2019-12-15 12:33:24 -08:00
Nathan Adams
aca746eee7
core: Implemented Array.splice with tests
2019-12-15 12:33:24 -08:00
Nathan Adams
31b84c5f19
core: Made arrays a storage property of objects, not a unique object type. Added more corner case tests.
2019-12-15 12:33:24 -08:00
Nathan Adams
3bdf710af6
core: Add another array.concat test
2019-12-15 12:33:24 -08:00
Nathan Adams
32a1eda080
core: Implement Arrays & array prototype
2019-12-15 12:33:24 -08:00
Nathan Adams
46b6ce570b
core: Added array tests
2019-12-15 12:33:24 -08:00
Mike Welsh
3c83d9ac9d
docs: Shuffle some docs in DisplayObject
2019-12-15 10:17:33 -08:00
Mike Welsh
95755b5fb3
tests: Add test for TransformedByScript flag
2019-12-15 10:17:33 -08:00
Mike Welsh
d7393dc81d
core: Add DisplayObjectFlags::TransformedByScript
...
This is set when a DisplayObject is dynamically moved by AS code,
which causes further modification from PlaceObject tags to be
ignored.
2019-12-15 10:17:33 -08:00
Mike Welsh
f6c50efe5a
tests: Clean up stage_object_propreties and add _name and _target
2019-12-15 10:17:33 -08:00
Mike Welsh
8c27097240
core: Implement _target property
...
Add DisplayObject::slash_path to get the Flash 4-style slash path
to the clip. This fixes the tellTarget regression test and removes
the superfluous `target_path` from `UpdateContext`.
2019-12-15 10:17:33 -08:00
Mike Welsh
d5f7521061
core: Ignore NaN in StageObject setters
2019-12-15 10:17:33 -08:00
Mike Welsh
e36dbad7d2
tests: Add stage_object_properties test
2019-12-15 10:17:33 -08:00
Mike Welsh
c9864eb557
core: Add StageObject properties
2019-12-15 10:17:33 -08:00
Mike Welsh
3986a8dc4a
tests: Add regression test for display object properties
2019-12-15 08:54:26 -08:00
Mike Welsh
d30506dc59
tests: Add test for enumerating child instances
2019-12-15 08:54:26 -08:00
Mike Welsh
f2422a2c9f
avm1: Add attributes for _global/_root/_parent
2019-12-15 08:54:26 -08:00
Mike Welsh
11f2b46b6a
tests: Add test for stage instances
2019-12-15 08:54:26 -08:00
Mike Welsh
c29b042f5e
avm1: Get child clip instances in StageObject
...
Add the logic to get children display objects as properties in
`StageObject`.
2019-12-15 08:54:26 -08:00
Mike Welsh
783ede6f79
core: Add DisplayObject::path
2019-12-15 08:54:26 -08:00
Mike Welsh
73604a891e
core: Move get_child_by_name to DisplayObject
2019-12-15 08:54:26 -08:00
David Wendt
724f845037
Remove the `DisplayNode` slot from `ScriptObject`, since all display node objects should be `StageObject`s now.
2019-12-15 08:54:26 -08:00
David Wendt
fa9329df68
Instantiate all MovieClips as StageObjects.
2019-12-15 08:54:26 -08:00
David Wendt
3df6c7eeef
Always post-instantiate display objects when running tests.
2019-12-15 08:54:26 -08:00
David Wendt
73655c0c88
Add a separate native object type for objects tied to the stage.
2019-12-15 08:54:26 -08:00
Mike Welsh
f0c6b2d8d8
core: Remove this from Object::get/set
2019-12-15 08:54:26 -08:00
dependabot-preview[bot]
251fb01572
build(deps): bump jpeg-decoder from 0.1.17 to 0.1.18
...
Bumps [jpeg-decoder](https://github.com/image-rs/jpeg-decoder ) from 0.1.17 to 0.1.18.
- [Release notes](https://github.com/image-rs/jpeg-decoder/releases )
- [Changelog](https://github.com/image-rs/jpeg-decoder/blob/master/CHANGELOG.md )
- [Commits](https://github.com/image-rs/jpeg-decoder/commits )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-12-11 18:21:42 +00:00
Mike Welsh
b59bf40c78
core: Remove this from Object::get/set
2019-12-10 01:36:02 -08:00