Commit Graph

139 Commits

Author SHA1 Message Date
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
David Wendt a5865d7c7d Implement DefineFunction2 2019-10-06 13:02:31 -07:00