Commit Graph

1097 Commits

Author SHA1 Message Date
relrelb 0367f6a8d4 avm1: Correct `ASSetPropFlags`
* The properties parameter is evaluated last. This is observable by
the order the `toString`/`valueOf` methods of the parameters are
called.
* Only `null` in the property list parameter configures all properties,
as opposed to `undefined`, `null`, numbers and booleans previously.
* Objects in the property list parameter are not handled specially.
Instead, they're also coerced to string and split by comma.
2021-07-18 20:03:52 +03:00
Chris Midgley 8e7ce18cc2 avm1: alphabetise text_field properties 2021-07-10 21:19:20 +03:00
Chris Midgley 156a4494aa avm1: update attributes of text_field properties 2021-07-10 21:19:20 +03:00
relrelb 580d8c3562 chore: Use to_le_bytes in more places 2021-07-09 19:56:52 +03:00
relrelb 87e9dda250 chore: Use from_le_bytes in more places 2021-07-09 19:56:52 +03:00
Callum Thomson 939d467897
avm1: Correct ToInteger
* Coerce objects as well.
* Wrap numbers around i32.
2021-07-09 03:39:07 +03:00
Chris Midgley ac0fc40345
avm1: implement scroll, maxscroll and bottomScroll for TextField (#4698)
* tests: add tests for scroll

* avm1: implement scroll, maxscroll, bottomScroll

* chore: fmt

* docs: note that scroll is 1-based

* fix: non-word wrapped text with manual breaks is scrollable

* chore: move magic number to const

* chore: avoid mut with extra if

* chore: moving clamping behaviour into core

* refactor: eagerly compute line data

* fix: make scroll work when text is aligned right

* chore: clippy

* docs: add more information about line_data

* tests: add more test cases for scroll
2021-07-08 19:23:30 +02:00
EmperorBale d334e30259
avm1: Fix apply_to_display_object (#4377) (#4743)
* avm1: Fix apply_to_display_object
2021-07-06 17:32:14 +02:00
TÖRÖK Attila 20080dda4e Fix minor bug/typo in `action_get_url_2`
The current version just doesn't make any sense.
The fixed version is akin to the `target.starts_with("_level") && target.len() > 6` line a bit earlier in this file.
2021-07-03 22:43:29 +02:00
relrelb 3a43957db5 chore: Minor cleanups 2021-07-03 17:26:34 +03:00
relrelb 7b37bf6809 chore: Avoid spelling "movieclip"
* Prefer "MovieClip" in comments.
* Prefer "mc" for variable names.
2021-06-24 14:36:45 +03:00
relrelb 8b35aad657 core: Take advantage of or patterns
Rust 1.53.0 ships with or patterns, which allow a little more
elegant code:
https://blog.rust-lang.org/2021/06/17/Rust-1.53.0.html#or-patterns
2021-06-24 01:15:22 -07:00
relrelb 59970bf7ac avm1: Shorten integers values
The .0 suffix can be omitted since into() supports integers as well.
2021-06-24 01:11:16 -07:00
relrelb 38a2650c0e chore: Use Value into() in more places 2021-06-24 01:11:16 -07:00
Adrian Wielgosik 1a132eb22d avm1: Don't attempt to serialize MovieClips 2021-06-23 19:18:49 -07:00
relrelb 0fd1c05fd5 chore: Use into() in more places 2021-06-22 11:49:41 -07:00
relrelb 13977d9d22 avm1: Correct some Array set_length cases
Array builtins (pop, shift, unshift) doesn't update the length of
non-Array objects. However, push does update the length for all
objects.
2021-06-22 10:43:10 -07:00
relrelb c383b70336 avm1: Merge array_function with constructor 2021-06-22 10:43:10 -07:00
relrelb 7948d872dc avm1: Correct AsBroadcaster removeListener 2021-06-22 10:43:10 -07:00
relrelb 8742f288cb avm1: Correct AsBroadcaster addListener 2021-06-22 10:43:10 -07:00
relrelb b0b48b5b0c avm1: Cleanup ScriptObject constructors 2021-06-22 10:43:10 -07:00
relrelb ab5f5b4878 avm1: Use custom array index parsing method
Indices can be of arbitrary size (by overflowing around i32), but
Rust's `parse` is limited to the i32 range.
2021-06-22 10:43:10 -07:00
relrelb 95c30b85e1 avm1: Extract ArrayObject 2021-06-22 10:43:10 -07:00
Chris Midgley b7de03b5c8
avm1: implement hscroll and maxhscroll for TextField 2021-06-22 01:43:02 -07:00
Mike Welsh e886756aab avm1: Wire up _soundbuftime
Store the `_soundbuftime` property in the audio manager. This is
currently unused by Ruffle, but the value will now be stored.
2021-06-20 01:25:27 -07:00
relrelb 6d1b6009e8 avm1: Use bitflags for ChannelOptions 2021-06-18 15:30:09 -07:00
Mike Welsh 09b86cda8b avm1: Implement ToggleHighQuality op
Wire up the op so that it affects the quality setting, although the
setting is still unused by Ruffle.

This op will remember whether the stage was in `High`/`Best` quality.
Split out the "bitmap downsampling" flag in `Stage` so that we can
persist this state.
2021-06-17 13:55:56 -07:00
Mike Welsh eb12a3af17 avm1: Wire up _highquality 2021-06-17 13:55:56 -07:00
Mike Welsh 9370b84092 avm1: Wire up _quality 2021-06-17 13:55:56 -07:00
Mike Welsh 6894382e8e avm1: Implement _droptarget 2021-06-16 12:42:49 -07:00
Mike Welsh 495f8d90e6 avm1: Implement dragOver/dragOut button events 2021-06-16 12:42:49 -07:00
Mike Welsh b0143ff918 core: Add Player::mouse_pressed_object 2021-06-16 12:42:49 -07:00
Mike Welsh 2f25887080 avm1: SetTarget of a removed clip is invalid
A `SetTarget` call should ignore any clip that has been removed.
This can happen in cases such as `tellTarget("_root")` seeking
to a frame where the clip no longer exists.

Fixes this issue:
https://github.com/ruffle-rs/ruffle/pull/4452#issuecomment-860747028
2021-06-14 14:04:28 -07:00
Mike Welsh 4687eb6d4e core: Ensure bitmaps run post_instantiate 2021-06-14 14:04:28 -07:00
Mike Welsh 1f96af6b64 core: Add Avm1::exec_list to manage global list of display objects 2021-06-14 14:04:28 -07:00
Mike Welsh 83f842faf9 avm1: Implement MovieClip.beginBitmapFill 2021-06-13 20:03:53 -07:00
Mike Welsh 554aa7fd63 core: Add backend::render::BitmapSource trait
This interface handles returning a bitmap given an ID and is used
by the render backend to get the bitmap used for a bitmap fill.
This will allow for bitmap fills in the drawing API, as these will
manage their own list of bitmaps.
This also  removes the MovieLibrary dependency from render backends
and will allow for better decoupling in the future.
2021-06-13 20:03:53 -07:00
relrelb 9c5b9b7072 avm1: Rewrite TObject array methods 2021-06-13 10:37:15 -07:00
Mike Welsh 3b215d6c76 core: Use swf::ClipEventFlag in stored clip event handlers
* Rename movie_clip::ClipAction to movie_clip::ClipEventHandler.
 * Store the swf::ClipEventFlag event flags that trigger the event
   directly in the event handler. Previously we split up any event
   that had multiple event flags into separate events. Now these
   can be kept as a single event.
 * Remove `MovieClip::has_button_event`, and instead store the
   union of all event flags in `MovieClip::clip_event_flags`. This
   will be useful for other cases in the future.
2021-06-11 12:54:53 -07:00
relrelb ede9650899 chore: Avoid unused_variables annotations
Instead prefix the unused variables with an underscore.
2021-06-11 16:16:53 +03:00
Mike Welsh 93e83d7ad5 avm1: DefineFunction should respect case sensitivity 2021-06-08 16:51:59 -07:00
Mike Welsh 21c351fe5b swf: Change Twips::zero fn to Twips::ZERO const 2021-06-08 14:57:15 -07:00
Mike Welsh d23ea90459 swf: Change Matrix to use Fixed16 for a, b, c, d
Matrices in an SWF file store their scale/skew components in
in 16.16 format (fbits).

Split `ruffle_core::Matrix` and `swf::Matrix`. `swf::Matrix` now
stores its data as `Fixed16` instead of immediately converting to
`f32`.
2021-06-08 14:57:15 -07:00
relrelb 39decde5bc avm1: Refactor ScriptObject::get_local 2021-06-08 10:48:50 -07:00
relrelb 1c0007f34f avm1: Make TObject::get_local return Option 2021-06-08 10:48:50 -07:00
relrelb 15fa92a9fb avm1: Add TObject::set_local 2021-06-08 10:48:50 -07:00
relrelb c9d015d7c5 avm1: Cleanup some TObject methods 2021-06-08 10:48:50 -07:00
relrelb ef2e581f09 core: Use casting instead of ToPrimitive 2021-06-07 11:29:28 -07:00
relrelb aee37276ec core: Replace num_enum with num_derive 2021-06-05 10:19:31 -07:00
relrelb f82faf9603 chore: Appease clippy 2021-06-05 10:16:00 -07:00
Mike Welsh f173b81e38 swf: Use bitflags for Function flags 2021-05-30 22:14:32 -07:00
Mike Welsh 2b98c878f0 swf: Use Fixed in more places 2021-05-30 21:24:03 -07:00
Adrian Wielgosik 34d54dbc05
avm1: Fix string methods handling of negative args (fix #4437)
* Improve string.substr handling of negative args
* Add tests for more substr() combinations
2021-05-30 12:04:17 -07:00
Moulins af5694b642 [avm1] extend impl_custom_object! to reduce boilerplate
This add two knobs to the impl_custom_object! macro:
  - `set(...)`, for using a specific prototype in the `set`
method;
  - `bare_object(...)`, for objects that are convertible to a raw object
type.
2021-05-24 17:06:47 -07:00
Mike Welsh 172ad82aa5 core: Add SwfMovie::uncompressed_len 2021-05-23 23:02:38 -07:00
Mike Welsh e1439f4105 swf: Add HeaderExt struct providing additional info
When reading an SWF, search for FileAttributes and
SetBackgroundColor and return this along with the header data
because it's useful (in particular, the AS3 flag).
2021-05-23 23:02:38 -07:00
relrelb 3fbadbe26f avm1: Remove unnecessary gc_context parameters
`add_property_with_case`, `set_watcher` and `remove_watcher` already
take an `activation`, from which the `gc_context` can be retrieved.
2021-05-22 10:49:27 -07:00
relrelb 7717b97027 avm1: Remove unnecessary calls to create_bare_object
In favor of ScriptObject::object and ScriptObject::array, which
always succeed.
2021-05-21 16:13:25 -07:00
relrelb aeb8902f8c avm1: Remove unused TObject::as_string 2021-05-21 15:27:35 -07:00
Moulins 35b9fb7317 avm1: add property_decl::declare_properties! macro for defining built-ins
This allows for reduced boilerplate when defining native methods,
properties, and constants (but not values depending on other runtime
values, like built-ins objects and prototypes).

Also remove ScriptObject::force_set_function (replaced by DeclKind::Method)
2021-05-17 10:34:41 -07:00
Mike Welsh 9b58dac841 avm2: Fix up DisplayObject root and stage properties
Move `MovieClip::is_swf` flag to `DisplayObject::is_root`, and use
this flag to handle the behavior of `DisplayObject.root` crawling
upwards until it hits a top-most loaded SWF/Bitmap.

Simplify `root` and `stage` so that they don't have to consider
buttons. Instead, do some trickery to ensure the button's states
see the proper values of `parent`, `root`, and `stage` during
construction.
2021-05-16 17:53:07 -07:00
David Wendt 157ced3dc3 core: Split the parent accessor further into `parent` and `avm1_parent`.
`parent` is now a bare accessor, `avm1_parent` returns what AVM1 thinks the parent should be, and `avm2_parent` returns what AVM2 thinks the parent should be.
2021-05-16 17:53:07 -07:00
David Wendt c0296d9963 core: Rename `Button` to `Avm1Button` 2021-05-16 17:53:07 -07:00
Mike Welsh b882284fc9 core: Use bitflags for HitTestOptions 2021-05-12 23:02:06 -07:00
relrelb 85b234003f avm1: Handle undefined/empty method name in NewMethod
Seems like it behaves similarly to CallMethod with an undefined/empty
method name.
2021-05-12 20:47:06 -07:00
relrelb 2589ecdde0 avm1: Correct ImplementsOp 2021-05-12 20:47:06 -07:00
relrelb 3bf3f1015d avm1: Return undefined on invalid count in InitArray and InitObject
Both InitArray and InitObject should bail-out without popping anything
off the stack when the elements/properties count is negative or greater
than or equals 2147483648.
2021-05-12 20:47:06 -07:00
relrelb 72531eddff avm1: Cleanup CallMethod 2021-05-12 20:47:06 -07:00
relrelb 2e0bc78cd6 avm1: Fix variadic arguments
Previously, if the arguments count was greater than the actual
stack size, then a stack underflow occurred which resulted in a
sequence of undefined values. That didn't match Flash's behavior.

Also, this prevents potential huge allocations that hang Ruffle.

In addition, num_args seems like it should use coerce_to_u32
(wraps at 4294967297). This also means that -1 ends up acting like
u32::MAX and would pop all values off of the stack.
2021-05-12 20:47:06 -07:00
Mike Welsh 6051ee4cb1 core: Disallow .. in shared object paths (fix #3961)
Toss out any shared objects that contain ".." in the name
to avoid accessing files outside of the Ruffle data directory.

The DiskStorageBackend also will fail any requests with a ".."
component as an extra precaution.

Fixes #3961.
2021-05-09 23:20:32 -07:00
CUB3D 61298b2be3 avm1: Add parsing of legacy json SharedObjects for backwards compatability 2021-05-09 23:20:32 -07:00
CUB3D c398aded68 chore: Remove debug printing 2021-05-09 23:20:32 -07:00
CUB3D cd1cde1708 avm1: Implement de/serialization of shared objects into Flash Player Lso format 2021-05-09 23:20:32 -07:00
relrelb 6b6b335440 avm1: Use bitflags for Array.sort flags 2021-05-08 01:37:05 -07:00
Mike Welsh ba7fd1b2b9 chore: Appease clippy, bump url
Bump url and avoid `Url::into_string` deprecation warnings.
Fix `single_char_pattern` clippy lints.
2021-05-07 20:51:26 -07:00
relrelb b2bc24919a avm1: Replace `current_swf_version` with `swf_version`
They happen to be identical, and `swf_version` is more idomatic.
2021-05-07 13:26:20 -07:00
Mike Welsh b82391726f avm1: MovieClip.getBytesLoaded/Total should return the clip's length
MovieClip.getBytesLoaded and getBytesTotal return the size of that
specific clip, even if it's not a loaded SWF.  The previous logic
only returned the size of the parent SWF.

If the clip is an SWF, the uncompressed size of the SWF is returned.
Otherwise, the length of the tag list inside the clip's DefineSprite
tag is returned.
2021-05-04 16:36:56 -07:00
Moulins 78627acc92 chore: Move core::property_map to core::avm1::property_map 2021-05-03 13:47:14 -07:00
Adrian Wielgosik 8ca22c1f02
core: Support for custom context menu items on movie root 2021-05-02 15:28:00 -07:00
Chris Midgley c03bc62074 fix: SharedObject data property is not deleteable 2021-05-01 17:40:01 -07:00
Mike Welsh 2a46c72bb2 avm1: Fix Array.splice
Clamp the index parameters to the length of the array. This fixes
`[].splice(1, 0, 'obj');` to add the object at the proper
position (0, because the start index 1 is larger than the length).
2021-04-30 13:48:27 -07:00
Adrian Wielgosik ce4d66e0f4 avm1: support Stage.showMenu 2021-04-27 16:42:02 -07:00
Mike Welsh 80bcf68634 avm1: Add StageScaleMode and StageAlign properties to Stage 2021-04-26 01:15:42 -07:00
David Wendt 1ee5bbf7ba avm2: Impl `Stage.frameRate` 2021-04-26 01:15:42 -07:00
David Wendt 7f4a99ca60 core: Add a `root_clip` method for `Stage` and make everything grabbing depth 0 off the stage use it 2021-04-26 01:15:42 -07:00
David Wendt f6fe0a84a2 core: Move the viewport and stage dimensions into the `Stage`. 2021-04-26 01:15:42 -07:00
David Wendt 67724bfc71 core: Move most of the player rendering code into the `Stage`'s render method. 2021-04-26 01:15:42 -07:00
David Wendt 6bf3206d95 core: Replace `context.levels` with a root stage 2021-04-26 01:15:42 -07:00
Mike Welsh c422a66aa6 chore: Appease clippy
Fix `bool_assert_comparison` and `from_iter_instead_of_collect` lints.
2021-04-24 21:42:30 -07:00
relrelb bab0ae8f30 avm1: Limit width and height of BitmapData 2021-04-24 16:16:24 -07:00
relrelb c78501f2bd avm1: Fix panic in BitmapData.loadBitmap
BitmapData.loadBitmap is not subject to the size limit. That is,
it can load larger bitmaps than the BitmapData constructor.
Fix panic for large bitmaps by not invoking the BitmapData constructor
directly. This should also improve performance.

Do the same for BitmapData.clone.
2021-04-24 16:16:24 -07:00
relrelb 2d3a4910fc avm1: Correct BitmapData constructor
* Extract is_size_valid, which respects 3 different limits:
SWF<=9, SWF10 and SWF>=11.
* Delay is_size_valid check after all arguments coercing.
* Swap the transparency and fill_color parameters of init_pixels.
2021-04-24 16:16:24 -07:00
TÖRÖK Attila 3f583088a2 core/avm1: Coerce Rectangle and Point parameter fields to f64 first 2021-04-21 18:46:03 -07:00
TÖRÖK Attila 22306cc8d9 core/avm1: Switch to i32 in BitmapData.merge(), clamp *_mult parameters 2021-04-21 18:46:03 -07:00
TÖRÖK Attila 40eedb6405 core/avm1: Implement BitmapData.merge() 2021-04-21 18:46:03 -07:00
Mike Welsh 0552d26551 core: Use Fixed8 and i16 for ColorTransform
Use the proper types for ColorTransform:
 * Fixed8 (8.8) format for multiplicative component
 * i16 format for additive component

This matches the behavior of Flash (for example, alpha only changes
in units of 1/256).
2021-04-19 15:47:52 -07:00
relrelb cd8ab813a4 avm1: Return an unboxed undefined in `TransformObject` constructor
This is now possible thanks to #2415.
2021-04-17 09:27:29 -07:00
relrelb 95cffdc2f9 avm1: Pass undefined this for CallMethod with non-string method_name
This isn't the most accurate behavior, since it should be an unboxed
Value, but currently it's not possible due to #843.
2021-04-17 09:25:24 -07:00
relrelb e3478248ac avm1: Implement Sound.getDuration() and Sound.setDuration()
These seem to be undocumented.
Looks like Sound.getDuration() behaves exactly as Sound.duration,
and Sound.setDuration() does nothing.
2021-04-17 09:11:50 -07:00
relrelb 6310e31023 avm1: Sound.duration should return undefined when no sound is attached
Previously it returned 0.
2021-04-17 09:11:50 -07:00
relrelb 4d41297b04 avm1: Remove reduntant new_ret_no_self annotation
Per https://rust-lang.github.io/rust-clippy/master/#new_ret_no_self,
`new_ret_no_self` applies only to functions named `new`.
`TObject::create_bare_object` used to be named `new`, but was renamed
in 79af3ffe44.
2021-04-16 15:25:22 -07:00
relrelb 1f934c5fc6 avm1: Remove redundant newlines 2021-04-16 15:25:22 -07:00
relrelb dac60da936 avm1: ValueObject::boxed -> coerce_to_object 2021-04-16 15:25:22 -07:00
relrelb 0f8f0986e9 chore: Use matches!(...) in more places 2021-04-16 15:25:22 -07:00
relrelb a2e162be0d avm1: Add Value::is_primitive
This provides a more convenient and readable way compared to
using matches!(Value::Object(_)).
2021-04-16 15:25:22 -07:00
relrelb 2ba6cada5b avm1: Reserve arguments capacity
This prevents unnecessary re-allocations.
2021-04-16 15:25:22 -07:00
Chris Midgley d89f0bbbfe fix: looks like contentType is ignored (at least in FP6) 2021-04-16 12:36:49 -07:00
Chris Midgley ba185418b9 chore: fmt 2021-04-16 12:36:49 -07:00
Chris Midgley 6c619495f4 chore: fix warnings 2021-04-16 12:36:49 -07:00
Chris Midgley 8e6bba1525 avm1: implement send_and_load 2021-04-16 12:36:49 -07:00
Chris Midgley f1b07bd75b avm1: set contentType on xml; fix initial contentType on load_vars. 2021-04-16 12:36:49 -07:00
Mike Welsh a45a5c2bcb avm1: _levelN should shadow children instances with the same name
If a child clip is named `_level0`, accessing `_level0` should
return the level and not the child clip.

Move `DisplayObject::get_level_by_path` to `StageObject`, and
change it to return an `Option<Value>`, and return
`Some(Value::Undefined)` if the path is a valid level path but
the level is not occupied. This causes get/set of `_levelN` to
be swallowed, even if the level isn't populated.
2021-04-15 13:49:17 -07:00
Mike Welsh 34886933e5 avm1: Adjust precedence of children in StageObject::get
Children instances should shadow display object magic properties.
For example, a child named "_x" will be returned instead of the
parent's _x position in GetMember.
2021-04-15 13:49:17 -07:00
Mike Welsh 9224e85a2d avm1: Delete2 returns true only if a property was actually deleted
This was incorrectly returning true for children instances
(`delete "clip"`).
2021-04-15 13:49:17 -07:00
desuwa 3030f2098a avm1: Run Player::run_actions after every timer callback. 2021-04-15 13:48:27 -07:00
Mike Welsh b9d84c0a82 chore: Appease clippy
Honor the branches-sharing-code lint.
2021-04-15 00:02:27 -07:00
Mike Welsh b6945395a8 avm1: Don't parse "inf" as Infinity
Rust nightly 4/13 allows f64::parse to handle "infinity", case
insensitive. This broke cases such as `Number("Infinity")`, which
should return `NaN` in AVM1.

Additionally, Rust will now print "-0" for negative zero, when
previously it would print "0".

 * Return NaN for inf cases ("inf", "-Infinity", "+INF", etc.)
 * Add a test for `Number("inf")` (this was also incorrect before
   the latest nightly)
 * Add a special case for zero in `f64_to_string` to ensure
   that -0.0 gets coerced to "0".

For more info, see:
https://github.com/rust-lang/rfcs/issues/1074
2021-04-14 21:51:48 -07:00
Adrian Wielgosik b2bed7a18d
avm1: Add missing clearTimeout() (fix #4003) 2021-04-14 11:02:04 -07:00
Moulins f9bbe96812 core: Remove extra Option/Results from XmlNode getters
This removes some special cases and simplifies the code.
2021-04-11 14:16:48 -07:00
Moulins ae1a01d181 avm1: Allow XMLNode reparenting (closes #3962)
`XMLNode.{appendChild, insertNode}` can now be used to move
child nodes from a parent to another.

There are two special cases:
  - if the node is already a child of the destination, nothing happens
  - if moving the node would create a cycle, nothing happens
2021-04-11 14:16:48 -07:00
desuwa 4f90b9d161 avm1: Support masks when mouse-picking. 2021-04-09 22:11:07 -07:00
David Wendt de1b0d4d0c core: Add support for an explicit loader URL (though nothing sets it yet) and expose it in `LoaderInfo`. 2021-04-05 16:18:37 -06:00
relrelb 2d37f4d23e avm1: Migrate `search_prototype` to primitive prototype 2021-04-03 12:40:05 -06:00
relrelb bbded90697 avm1: Rename proto_value to proto 2021-04-01 17:06:07 -06:00
relrelb 89679bba65 avm1: Delete proto and set_proto
In favor of the new proto_value and set_proto_value pair.
In the next commit proto_value and set_proto_value will be renamed
to proto and set_proto.
2021-04-01 17:06:07 -06:00
relrelb 76d80061a7 avm1: Migrate Object to proto_value 2021-04-01 17:06:07 -06:00
relrelb e712a4fd59 avm1: Migrate FunctionObject to proto_value 2021-04-01 17:06:07 -06:00
relrelb dc174b9d9f avm1: Migrate StageObject to proto_value 2021-04-01 17:06:07 -06:00
relrelb be60aa5941 avm1: Migrate XmlIdMapObject to proto_value 2021-04-01 17:06:07 -06:00
relrelb ea52562d06 avm1: Migrate XmlAttributesObject to proto_value 2021-04-01 17:06:07 -06:00
relrelb 161db474a2 avm1: Migrate SuperObject to proto_value 2021-04-01 17:06:07 -06:00
relrelb 766a5db31c avm1: Migrate ScriptObject to proto_value 2021-04-01 17:06:07 -06:00
relrelb 18a32424bd amv1: Migrate custom_object.rs to proto_value 2021-04-01 17:06:07 -06:00
relrelb e5660bc0c7 avm1: Allow primitive prototypes
Prototypes can be primitive, not just objects. However, TObject's
proto() and set_proto() work with Object and not Value. To allow
easier and more incremental migration from Object to Value, this
commit introduces a new pair of proto_value/set_proto_value functions
in TObject, preserving the existing proto/set_proto functions.
Both pairs have default implementations, so it's enough to implement
only one pair in each TObject implementation.
For now only ScriptObject uses the new pair, which fixes the behavior
of incorrectly coercing __proto__ to object.

Follow-up migration plan:
1. Replace all old proto/set_proto implementations by the new
proto_value/set_proto_value in all TObject implementations on a
one-by-one basis.
2. After proto/set_proto become unused, delete them and rename
proto_value/set_proto_value to proto/set_proto for more concise code.
2021-03-31 18:04:52 -06:00
relrelb a3727e0727 avm1: Fix "this" argument conversion in Function.prototype.{call,apply}
The "this" argument should fall-back to the global object only for
undefined or null. Other primitives should be coerced to an object
rather than falling-back to the global object.

As a drive-by replace `Vec::new` by `Vec::with_capacity` in
`Function.prototype.apply` to minimize unnecessary reallocations.
2021-03-31 17:59:58 -06:00
David Wendt e8b6d1a52a core: Migrate clip drawing commands to exposing the internal `Drawing` to mutation 2021-03-24 13:18:06 -07:00
Adrian Wielgosik 2d1c60e02e
avm1: Fix binary operators not returning signed values
Also enabled AVM2 test that was forgotten before.
2021-03-20 14:49:55 -07:00
EmperorBale ac9d27b2fd
avm1: Avoid panic when setMask called with no arguments (fix #3298) 2021-03-19 17:25:58 -07:00
Chris Midgley aa94f6570e
avm1: fix String.substr behaviour for negative lengths (fix #3626) 2021-03-19 14:32:04 -07:00
David Wendt f5268198b0 avm2: Don't round text metrics (`textWidth` and `textHeight`) 2021-03-19 12:39:57 -07:00
relrelb 3b6f0f0ced avm1: Fix color_bounds_rect 2021-03-18 22:04:39 -07:00
Adrian Wielgosik 1aa77b04fe
avm1: Reduce frequency of timeout checks by 10+ times 2021-03-13 01:19:58 -08:00
relrelb e594f602b6 chore: Twips::new(0) -> Twips::zero() 2021-03-13 00:56:04 -08:00
relrelb 866e143073 chore: Cleanup bounds related code 2021-03-08 14:34:26 -08:00
EmperorBale 4d7b2fa1b9
avm1: Fix #3446
Thanks!
2021-03-08 00:52:35 -08:00
TÖRÖK Attila 339d0330a2 avm1: Fix seeking
The problem was most likely with negative relative offsets
2021-03-08 00:49:16 -08:00
relrelb 8f21c17683 chore: Rename MutationContext parameters to gc_context 2021-03-06 23:30:06 -08:00
TÖRÖK Attila 873736950e core/avm1: Implement BitmapData.paletteMap() 2021-03-03 05:26:24 -08:00
David Wendt 464f388324 avm2: Unstaged display objects are treated as unrooted. 2021-03-03 03:08:01 -08:00
Adrian Wielgosik 14e0980226 avm1: Implement getInstanceAtDepth 2021-03-01 15:31:30 -08:00