David Wendt
9d422dc269
Allow getters to resolve on the AVM1 stack.
...
This involved yet another macro, `and_then!`, to avoid a ridiculous amount of duplicate code. It calls a continuation whenever it's value is ready, even if the value resolved on the Rust stack.
`locals_into_form_values` does not currently support this. It skips any property that does not resolve on the Rust stack. Future work is required to resolve this.
2019-11-20 14:30:30 -05:00
David Wendt
a59fffbc4e
Ensure that the value of the newly constructed `this` is returned in all cases.
...
This involves the use of a "stack continuation" system. Due to previous lifetime issues with using closures directly (see `8ea6c6234dba925ec5fbc61502627fb62b05916c`), we instead use a macro that constructs a `Collect`able type holding the things the continuation needs to continue working with. The syntax is largely similar to Rust closures but with the addition of an explicit list of bound variables, all of which must be `Collect`.
2019-11-20 14:30:29 -05:00
David Wendt
a95861d596
Stack continuations can now directly manipulate the return value of an ActionScript function.
2019-11-20 14:30:29 -05:00
David Wendt
8485e919db
Add a notion of "and_then" to activation objects.
...
This effectively constitutes the ability to assign arbitrary native contiuations to the AVM stack.
2019-11-20 14:30:29 -05:00
David Wendt
1236b5491e
Ensure calls to `getURL`, invocations of `ActionGetURL`, and other functionality that writes locals doesn't panic due to double mutable borrows.
2019-11-11 14:09:25 -05:00
David Wendt
4e16c91dbb
Add tests for `locals_into_form_values`.
2019-11-11 14:09:25 -05:00
David Wendt
0d4e21162a
Implement `ActionEnumerate2`.
2019-10-30 19:26:06 -07:00
Mike Welsh
1a7959b96d
audio: Initial syncing of stream sound to MovieClip timeline
2019-10-29 23:36:51 -07:00
David Wendt
6a81b5327d
Implement `DoInitAction`.
...
This pushes an extra `undefined` onto the stack to fix underflow in AS2 interface declarations.
It is currently unknown if this is a miscompilation or if some other value is supposed to be there.
# Conflicts:
# core/src/avm1.rs
# core/src/avm1/object.rs
2019-10-29 11:11:25 -07:00
Mike Welsh
01f47d675c
core: Move UpdateContext into context submodule
2019-10-27 13:49:47 -07:00
Mike Welsh
dddfb42e1e
core: Merge ActionContext into UpdateContext
2019-10-27 13:49:47 -07:00
Mike Welsh
247fd3b9c6
core: Run gotos immediately
...
Gotos now goto the specified frames immediately as opposed to
queuing. Actions on the new frame will still be queued,
and are executed after any current actions are completed.
2019-10-26 03:35:58 -07:00
Mike Welsh
c718a6c8cb
core: Add more properties to ActionContext
...
ActionContext needs to be able to call goto, so it needs access
to most of UpdateContext.
TODO: Remove ActionContext, and only have UpdateContext?
2019-10-26 02:21:46 -07:00
Mike Welsh
a4bed6c643
core: Improve execution order of AS
2019-10-26 01:52:42 -07:00
Nathan Adams
348e7f6adb
chore: Impl From<numeric> for Value, better dev ergonomics
2019-10-21 17:14:00 +02:00
Nathan Adams
83b7d679ed
chore: Impl From<GcCell<'gc, Object<'gc>>> for Value, better dev ergonomics
2019-10-21 13:00:52 +02:00
Nathan Adams
fa5616a4f9
chore: Impl From<bool> for Value, better dev ergonomics
2019-10-21 12:55:17 +02:00
Nathan Adams
f24ab37810
chore: Impl From<&str> for Value, better dev ergonomics
2019-10-21 12:33:49 +02:00
Nathan Adams
796c641b3b
chore: Impl From<String> for Value, better dev ergonomics
2019-10-21 12:30:59 +02:00
Will Brindle
5b298a0814
chore: refactor test code to share common methods
2019-10-19 10:31:37 +01:00
Will Brindle
38c66b5b8d
core: implement Boolean function
2019-10-19 10:29:26 +01: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
e830273fe5
Don't pull multiple borrows on the same `GcCell`
2019-10-13 17:54:09 -04:00
David Wendt
d909fb01bb
Use player version as a fallback when the current SWF version is requested without a valid stack.
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
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
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
Mike Welsh
40722dcef0
avm1: Merge#81, add property attributes
...
Added object property attributes
2019-10-09 10:24:21 -07:00
Will Brindle
ba939fc00b
chore: add comment explaining the weird NaN situation
2019-10-09 06:17:41 +01:00
Will Brindle
32554e271f
chore: remove trailing whitespace
2019-10-08 21:40:15 +01:00
Will Brindle
f84f807bf1
core: refactor to make use of equality implementation
2019-10-08 21:36:50 +01:00
Will Brindle
70b7b1c807
chore: fix clippy & fmt issues
2019-10-08 21:04:26 +01:00
Will Brindle
6508ec6b6c
core: nan equality
2019-10-08 20:51:21 +01:00
Will Brindle
e2c7af5cda
core: fix boolean strict comparison
2019-10-08 19:59:32 +01:00
Will Brindle
9cf381b0e0
core: add support for actions GreaterThan, StringGreaterThan and StrictEquals
2019-10-08 19:59:32 +01:00
Nathan Adams
3d09ec81e2
Add Attribute::DontEnum
2019-10-08 16:36:39 +02:00
Nathan Adams
f2a4000ee2
Added object property attributes (initially just DontDelete)
2019-10-08 14:30:36 +02:00
Mike Welsh
574ede0541
avm1: Return proper root object for Avm1::root_object
...
Was returning start_clip instead. Also call
DisplayObject::post_instantiation for root after it's created in
Player::new.
2019-10-07 01:36:05 -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
06d0cf5ed1
Add a stern warning to be triggered if multiple readers are open at once.
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
8734c036a7
Removed unused function
2019-10-06 13:02:31 -07:00
David Wendt
91cbbb4e9c
`ActionWaitForFrame`/`2` should not create their own readers either.
2019-10-06 13:02:31 -07:00