Mike Welsh
93cf7a1386
text: Use retire_stack_frame after firing text bindings
2020-06-28 23:37:50 -07:00
Mike Welsh
618fa11acb
avm1: Implement text field variable binding
2020-06-28 18:36:10 -07:00
Mike Welsh
51d66c53f0
core: Edit text sets variables on instantiation
2020-06-28 18:36:10 -07:00
Mike Welsh
52fbb77e99
avm1: DefineLocal respects virtual properties and prototype chain ( fix #760 )
...
DefineLocal will call a virtual setter if the property already exists
on the local object, including the local object's prototype chain.
DefineLocal2 will also not overwrite a property if it already exists
on the local object, including the local object's prototype chain.
2020-06-28 15:15:45 -07:00
Mike Welsh
054194026e
avm1: Mark __constructor__ and constructor as DontEnum
2020-06-27 18:54:01 -07:00
Nathan Adams
463b79f063
avm1: Implement Action::Throw
2020-06-25 02:03:15 -07:00
Nathan Adams
70e4a40f01
avm1: Allow for user errors inside avm1::error::Error
2020-06-25 02:03:15 -07:00
CUB3D
8e28bab159
chore: Fix clippy lints, refactor storage to use data_local_dir
2020-06-24 01:46:07 +01:00
CUB3D
0122d65a09
core: Refactor SharedObject
2020-06-24 01:46:07 +01:00
Nathan Adams
2e7ebbf258
avm1: Fatal errors will halt the AVM and prevent further execution
2020-06-20 15:02:00 -07:00
Nathan Adams
f5da954b32
avm1: Merge avm1::Error and avm1::ExecutionError for now. It's plausible that nested inside actions we can encounter an ExecutionError, so at that point it doesn't make sense to have a separation.
2020-06-20 15:02:00 -07:00
Nathan Adams
e2c607c70f
avm1: Avm1::retire_stack_frame can't error, so adjust its signature appropriately
2020-06-20 15:02:00 -07:00
Nathan Adams
a36e2105a3
avm1: Made avm1::Error an actual error type, and removed all calls that throw incorrect errors in avm1
2020-06-20 15:02:00 -07:00
Nathan Adams
ad07520af3
avm1: Add avm1::ExecutionError
2020-06-20 15:02:00 -07:00
Nathan Adams
c8f0753da4
core: Rename Value::as_number to Value::coerce_to_f64
2020-06-19 12:48:28 -07:00
Nathan Adams
67042b255c
core: Replace Value::as_* numeric methods in favour of coerce_to_* or manual matching
2020-06-19 12:48:28 -07:00
Nathan Adams
f4b4d0ebb7
core: Replace Value::into_string in favour of coerce_to_string or manual matching
2020-06-19 12:48:28 -07:00
Nathan Adams
5662b2d4d9
core: Make Value::coerce_to_string return a Cow<str>`
2020-06-19 12:48:28 -07:00
Nathan Adams
9633dc71c3
core: Replace Value::as_string in favour of coerce_to_string or manual matching
2020-06-19 12:48:28 -07:00
Nathan Adams
5dd1a1e509
core: Remove Value::get, you must box the value first
2020-06-19 12:48:28 -07:00
Nathan Adams
fc18c2fce5
core: Rename Value::as_object to Value::coerce_to_object
2020-06-19 12:48:28 -07:00
Nathan Adams
b2b57c1540
core: Make Value::as_object always return a (possibly boxed) object
2020-06-19 12:48:28 -07:00
Mike Welsh
77cb186357
avm1: Constructors queue to run after a goto
...
If a class is registered to a clip that is placed on the timeline
during a goto, that constructor should run after the frame is
completely constructed. In order to tell whether to run the
constructor immediately, add a parameter to `post_instantiation`
to indicate if the clip is instantiated from the AVM or via a
standard timeline seek.
2020-06-16 14:53:44 -07:00
Mike Welsh
35a4c05923
avm1: CallFunction can resolve variable paths
2020-06-13 02:48:38 -07:00
Nathan Adams
d39ffcfadc
core: `Value::call` no longer requires you to resolve after calling it
2020-06-08 15:12:05 -07:00
Nathan Adams
fe55c5a264
core: `TObject::call_method` no longer requires you to resolve after calling it
2020-06-08 15:12:05 -07:00
Nathan Adams
da3e2bb0a0
core: `TObject::call` no longer requires you to resolve after calling it
2020-06-08 15:12:05 -07:00
Nathan Adams
a121a3a4d0
core: `TObject::get` no longer requires you to resolve after retrieving it
2020-06-08 15:12:05 -07:00
Nathan Adams
226a97ef4b
core: Don't panic on `new DoesntExist()`
2020-06-02 18:49:01 -07:00
Nathan Adams
edcd1e6d65
core: Add keyboard shortcut to dump every variable (ctrl+alt+V, same as Flash Player)
2020-05-10 23:39:54 -07:00
Nathan Adams
84f6b4d06e
core: Set init_object values after prototype but before constructor
2020-05-03 12:46:55 -07:00
Nathan Adams
8384847084
avm1: Deleting on a non-object is a silent failure & warning, not a hard error
2020-04-30 14:18:54 -07:00
David Wendt
ed29b1c3bb
It turns out Macromedia just used an undocumented but user-modifiable property called `__constructor__` to store the constructor.
...
A previous version of this PR (whose history has been scrubbed, but go check 918d88abe68b7467a4194738b95e5bf3e9b5bb72 if you're curious) implemented a new `TObject` property which basically every line of code that dealt with object construction had to populate. It was terrible.
2020-04-25 14:37:24 -04:00
David Wendt
17d96a0fa6
Constructing a new object sets `constructor` on that object for SWFv6 and lower.
2020-04-25 13:25:20 -04:00
David Wendt
f3b3db51cb
Alter AVM1 to keep track of each function call's *base prototype*: the object from which a particular function was retrieved from.
...
A base prototype is only applicable in cases where a method is being called as a property on an object. Bare function calls, `apply`/`call` calls, and so on do not generate a base prototype.
We also add a convenience method, `call_method`, to all objects. This method automatically calculates the correct base prototype for a method call on an object, which is the only operation that should generate base prototypes.
2020-04-25 13:25:18 -04:00
Nathan Adams
b43d0c2430
core: Pass SwfMovies along to empty movie clips
2020-04-21 05:49:25 -07:00
Nathan Adams
330e6b40f0
core: post_instantiation should happen after properties are set, but before first frame or actions
2020-04-17 23:48:58 -07:00
Nathan Adams
601fcbfebd
core: Queue up changes of movieclip prototypes, don't execute it immediately (but at a higher priority than normal actions)
2020-04-17 23:48:58 -07:00
Nathan Adams
bf639e1802
avm1: Don't crash when enumerating non-objects, it's a silent fail
2020-04-15 05:26:09 -07:00
Mike Welsh
0c0d3dfd41
core: Add Navigator::time_since_launch to use for getTimer
...
Change `ActionGetTime` (`getTimer`) to use a new backend method.
This allows it to return updated times if it is called multiple
times in a single frame. This fixes hangs caused by games that use
busy-loop "frame limiter" code.
2020-03-28 22:28:07 -07:00
Mike Welsh
8da9487c0a
avm1: Match Flash's property enumeration order ( fix #153 )
2020-03-28 16:22:02 -07:00
Mike Welsh
2cdf780e6f
avm1: Handle case sensitivity in DisplayObject children
...
Alter `get_child_by_name` and alter `get_level_by_path` to respect
case sensitivity.
2020-03-28 16:22:02 -07:00
Mike Welsh
7d848f4f34
avm1: Add avm parameter to TObject methods
...
This is necessary to get the current SWF version for properly
handing case sensitivity.
2020-03-28 16:22:02 -07:00
Mike Welsh
1ef698f2ea
core: Add PropertyMap for handling AVM1 object properties
...
`PropertyMap` wraps over `IndexMap` to handle object properties in
AVM1. All insert/remove/get methods require and `swf_version`
parameter, and the `PropertyMap` will take care of handling case
senstivity and maintaing iteration order based on the SWF version.
2020-03-28 16:22:02 -07:00
Mike Welsh
4df1128c19
core: Implement Object.registerClass (merge #344 )
...
Implement Object.registerClass
2020-03-25 18:55:49 -07:00
Mike Welsh
e9cb05aeb4
avm1: Correct order of modulo operands
...
Addresses part of #458 .
2020-03-20 16:00:28 -07:00
Nathan Adams
b4624fddce
avm1: GetVariable and SetVariable look through the scope chain. Fixes #414
...
GetVariable and SetVariable attempt to resolve paths on each scope
in the scope chain.
2020-03-19 19:58:16 -07:00
Mike Welsh
13b039fa34
chore: Fix clippy iter-nth-zero warnings
...
New lint added in latest clippy versions.
2020-03-12 21:16:30 -07:00
Nathan Adams
d850443c84
avm1: Refactor to expose `avm, context` in `post_instantiate`
2020-02-29 23:05:15 +01:00
Mike Welsh
8c486b7544
chore: Use free functions for movie_clip methods
...
Try to keep style more consistent by using functions for all MC
methods. Previous was a mix of closures and functions (we're still
a little bad with this elsewhere)
2020-02-24 11:17:40 -08:00