Will Brindle
38c66b5b8d
core: implement Boolean function
2019-10-19 10:29:26 +01:00
Mike Welsh
f5710854b2
avm1: Fix off-by-one bug in Activation::has_local_register
2019-10-15 17:10:34 -07:00
Mike Welsh
e315fcb6b3
swf: Store register count from DefineFunction2
...
Also update avm1::Function to use register_count.
2019-10-15 17:09:14 -07:00
David Wendt
ad17166c63
Store the player version in `Avm1` so that `current_swf_version` doesn't require the context.
2019-10-13 18:55:39 -04:00
David Wendt
7e2cf03789
Implement register underflow behavior.
...
This has the side effect of letting us remove the `Option` on register_count since setting this to `0` is equivalent now. Furthermore, we can skip an allocation if a function requests no registers.
2019-10-13 18:41:07 -04:00
David Wendt
911cf64cb0
Fix clippy lints
2019-10-13 17:58:21 -04:00
David Wendt
269775c0e1
Implement the SWF5 version negotiation algorithm.
...
On SWF5, the SWF version of the callee depends on it's this parameter. Calling it as a function rather than a method downgrades the callee. SWF6+ use the callee's inherent SWF version and do not allow changing the SWF version like this.
2019-10-12 10:39:55 -04:00
David Wendt
d543e67528
Inline the first 8 registers with a `SmallVec`.
2019-10-12 10:39:54 -04:00
David Wendt
17b1e0429c
Explicitly allow `_global` and `_root` to be overwritten.
2019-10-12 10:39:53 -04:00
David Wendt
4709d2d0b4
Revert "Allow overwriting virtual properties via setting `set` to `None`."
...
This reverts commit 0a8adfca6e5fce8835552c1c7aba063649ba3aeb.
2019-10-12 10:39:53 -04:00
David Wendt
59dc35b8a4
Allow scope chain resolution to retrieve virtual properties
2019-10-12 10:39:53 -04:00
David Wendt
a92190a456
Support pre-resolving `_parent`
2019-10-12 10:39:52 -04:00
David Wendt
0f04d97002
Move `_global` and `_root` to the MovieClip object, and implement `_parent` while we're in here.
2019-10-12 10:39:52 -04:00
David Wendt
d35e36def5
Allow overwriting virtual properties via setting `set` to `None`.
2019-10-12 10:39:52 -04:00
David Wendt
feaa3dd203
Add a version parameter to every DisplayObject impl
2019-10-12 10:39:52 -04:00
David Wendt
8668d47403
Add a player version parameter and expose it to AVM
2019-10-12 10:39:51 -04:00
David Wendt
2f257c83e8
Remove the representation split between functions defined with `DefineFunction` and `DefineFunction2`. Both are now represented with a single struct and enum.
2019-10-12 10:39:51 -04:00
David Wendt
b4ddd323f2
Use the same methodology to construct new scopes for tellTarget.
2019-10-12 10:39:51 -04:00
David Wendt
1b62ead082
Construct the closure scope chain in one pass, which lets us skip the vec allocation.
2019-10-12 10:39:50 -04:00
Nathan Adams
d697d03cf0
Drop the `Attribute::` everywhere
2019-10-08 20:35:23 +02:00
Nathan Adams
3d09ec81e2
Add Attribute::DontEnum
2019-10-08 16:36:39 +02:00
Nathan Adams
f782aaee18
Add Attribute::ReadOnly
2019-10-08 15:24:57 +02:00
Nathan Adams
f2a4000ee2
Added object property attributes (initially just DontDelete)
2019-10-08 14:30:36 +02:00
Will Brindle
2e3748438a
core: define globals for NaN, Infinity, -Infinity. Should fix `typeof NaN`
2019-10-08 02:59:26 -07:00
Mike Welsh
4477e8458f
avm1: Return dummy value 1 for getBytesLoaded/getBytesTotal
...
Previously returned 0 which would cause divide by 0 in many
preloaders.
2019-10-07 00:33:30 -07:00
Mike Welsh
18a3494de2
chore: Typo supress -> suppress
2019-10-06 15:24:38 -07:00
Mike Welsh
b6eba80ebd
chore: cargo fmt
2019-10-06 14:57:43 -07:00
Mike Welsh
1c3e4406b3
chore: Fix clippy lints
...
* Remove clone calls from Copy objects
* Used Iterator::cloned() instead of manually cloning
* Pass swf::Function into AvmFunction2::new()
* Use action_clone_sprite
2019-10-06 14:57:36 -07:00
David Wendt
2d365856a7
Fix tellTarget being broken by the introduction of scopes. We now create a new scope chain based off the selected active clip.
2019-10-06 13:02:31 -07:00
David Wendt
588b2bb061
Fixes to make tests compile again
2019-10-06 13:02:31 -07:00
David Wendt
5873eefb06
Since it is possible to have virtual properties in the scope chain, overwriting them should trigger their setters.
...
Define, since it's intended for setting locals only, always uses force-set and does not trigger setters.
2019-10-06 13:02:31 -07:00
David Wendt
8ed09e22ba
Refactor: Since `function.rs` handles calling conventions it should just hand the avm an activation object directly
2019-10-06 13:02:31 -07:00
David Wendt
cf5420e2e1
Implement register preloading, for variables we already have implemented.
2019-10-06 13:02:31 -07:00
David Wendt
a5865d7c7d
Implement DefineFunction2
2019-10-06 13:02:31 -07:00
David Wendt
ec1b5c457e
Allow activations to hold their own private register set.
2019-10-06 13:02:31 -07:00
David Wendt
002dd9904c
Implement `ActionDelete` / `ActionDelete2`
2019-10-06 13:02:31 -07:00
David Wendt
9b81a92516
Fix a number of bugs preventing the with-scope test from working at all:
...
1. We no longer implicitly return Undefined unless we're specifically returning from a function (this also keeps actions from filling the stack with Undefined)
2. With scopes are now always inserted behind the current set of locals rather than overriding them
3. `ActionSubtract` now subtracts (instead of adds)
2019-10-06 13:02:31 -07:00
David Wendt
fc1ce7692b
Implement ActionWith
2019-10-06 13:02:31 -07:00
David Wendt
22f75b7a4c
Implement closure scope
2019-10-06 13:02:31 -07:00
David Wendt
d757ce0cd2
Implement arguments object.
2019-10-06 13:02:31 -07:00
David Wendt
90b0140ac2
Don't lock up when running scope operations
2019-10-06 13:02:31 -07:00
David Wendt
9ede91df4f
Move `this` into the activation object.
...
Also, change the implicit `this` on functions to `active_clip` as per the `ActionContext` docstrings.
2019-10-06 13:02:31 -07:00
David Wendt
ca1fb713a3
Execute actions in MovieClip scope
2019-10-06 13:02:31 -07:00
David Wendt
215d4f2df4
Provide arguments as local variables as some functions look for these
2019-10-06 13:02:31 -07:00
David Wendt
f3d83908ab
All activation frames share the same stack (and can see each other's garbage).
2019-10-06 13:02:31 -07:00
David Wendt
667b30f4b5
Add scope chains for local variable resolution.
2019-10-06 13:02:31 -07:00
David Wendt
edc37dee5d
Add support for calling bare functions and returning from them.
2019-10-06 13:02:31 -07:00
David Wendt
00b5d9ecf5
Implement DefineFunction
2019-10-06 13:02:31 -07:00
David Wendt
83c832ce86
Distinguish between Native and ActionScript functions.
2019-10-06 13:02:31 -07:00
David Wendt
617b493733
Give AVM1 the notion of a stack frame.
...
This necessitates the use of a copy of SWF data into the GC arena, along with unsafe (and possibly unsound) pointer manipulation to get the action reader to hold a GC pointer.
2019-10-06 13:02:30 -07:00