mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-11 18:50:50 +00:00
LibJS+LibWeb: Use realm.create<T> instead of heap.allocate<T>
The main motivation behind this is to remove JS specifics of the Realm from the implementation of the Heap. As a side effect of this change, this is a bit nicer to read than the previous approach, and in my opinion, also makes it a little more clear that this method is specific to a JavaScript Realm.
This commit is contained in:
parent
2a5dbedad4
commit
9b79a686eb
Notes:
github-actions[bot]
2024-11-13 21:52:48 +00:00
Author: https://github.com/shannonbooth
Commit: 9b79a686eb
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/2322
Reviewed-by: https://github.com/gmta
326 changed files with 697 additions and 714 deletions
|
@ -25,15 +25,13 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioBuffer>> AudioBuffer::create(JS::Realm
|
|||
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioBuffer>> AudioBuffer::construct_impl(JS::Realm& realm, AudioBufferOptions const& options)
|
||||
{
|
||||
auto& vm = realm.vm();
|
||||
|
||||
// 1. If any of the values in options lie outside its nominal range, throw a NotSupportedError exception and abort the following steps.
|
||||
TRY(BaseAudioContext::verify_audio_options_inside_nominal_range(realm, options.number_of_channels, options.length, options.sample_rate));
|
||||
|
||||
// 2. Let b be a new AudioBuffer object.
|
||||
// 3. Respectively assign the values of the attributes numberOfChannels, length, sampleRate of the AudioBufferOptions passed in the
|
||||
// constructor to the internal slots [[number of channels]], [[length]], [[sample rate]].
|
||||
auto buffer = vm.heap().allocate<AudioBuffer>(realm, realm, options);
|
||||
auto buffer = realm.create<AudioBuffer>(realm, options);
|
||||
|
||||
// 4. Set the internal slot [[internal data]] of this AudioBuffer to the result of calling CreateByteDataBlock([[length]] * [[number of channels]]).
|
||||
buffer->m_channels.ensure_capacity(options.number_of_channels);
|
||||
|
|
|
@ -113,7 +113,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioBufferSourceNode>> AudioBufferSourceNo
|
|||
// When the constructor is called with a BaseAudioContext c and an option object option, the user agent
|
||||
// MUST initialize the AudioNode this, with context and options as arguments.
|
||||
|
||||
auto node = realm.vm().heap().allocate<AudioBufferSourceNode>(realm, realm, context, options);
|
||||
auto node = realm.create<AudioBufferSourceNode>(realm, context, options);
|
||||
return node;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ JS_DEFINE_ALLOCATOR(AudioContext);
|
|||
// https://webaudio.github.io/web-audio-api/#dom-audiocontext-audiocontext
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioContext>> AudioContext::construct_impl(JS::Realm& realm, AudioContextOptions const& context_options)
|
||||
{
|
||||
return realm.heap().allocate<AudioContext>(realm, realm, context_options);
|
||||
return realm.create<AudioContext>(realm, context_options);
|
||||
}
|
||||
|
||||
AudioContext::AudioContext(JS::Realm& realm, AudioContextOptions const& context_options)
|
||||
|
|
|
@ -33,7 +33,7 @@ WebIDL::UnsignedLong AudioDestinationNode::max_channel_count()
|
|||
|
||||
JS::NonnullGCPtr<AudioDestinationNode> AudioDestinationNode::construct_impl(JS::Realm& realm, JS::NonnullGCPtr<BaseAudioContext> context)
|
||||
{
|
||||
return realm.heap().allocate<AudioDestinationNode>(realm, realm, context);
|
||||
return realm.create<AudioDestinationNode>(realm, context);
|
||||
}
|
||||
|
||||
void AudioDestinationNode::initialize(JS::Realm& realm)
|
||||
|
|
|
@ -28,7 +28,7 @@ AudioListener::AudioListener(JS::Realm& realm)
|
|||
|
||||
JS::NonnullGCPtr<AudioListener> AudioListener::create(JS::Realm& realm)
|
||||
{
|
||||
return realm.vm().heap().allocate<AudioListener>(realm, realm);
|
||||
return realm.create<AudioListener>(realm);
|
||||
}
|
||||
|
||||
AudioListener::~AudioListener() = default;
|
||||
|
|
|
@ -25,7 +25,7 @@ AudioParam::AudioParam(JS::Realm& realm, float default_value, float min_value, f
|
|||
|
||||
JS::NonnullGCPtr<AudioParam> AudioParam::create(JS::Realm& realm, float default_value, float min_value, float max_value, Bindings::AutomationRate automation_rate)
|
||||
{
|
||||
return realm.vm().heap().allocate<AudioParam>(realm, realm, default_value, min_value, max_value, automation_rate);
|
||||
return realm.create<AudioParam>(realm, default_value, min_value, max_value, automation_rate);
|
||||
}
|
||||
|
||||
AudioParam::~AudioParam() = default;
|
||||
|
|
|
@ -83,8 +83,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<BiquadFilterNode>> BiquadFilterNode::constr
|
|||
{
|
||||
// When the constructor is called with a BaseAudioContext c and an option object option, the user agent
|
||||
// MUST initialize the AudioNode this, with context and options as arguments.
|
||||
|
||||
auto node = realm.vm().heap().allocate<BiquadFilterNode>(realm, realm, context, options);
|
||||
auto node = realm.create<BiquadFilterNode>(realm, context, options);
|
||||
|
||||
// Default options for channel count and interpretation
|
||||
// https://webaudio.github.io/web-audio-api/#BiquadFilterNode
|
||||
|
|
|
@ -24,7 +24,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<DynamicsCompressorNode>> DynamicsCompressor
|
|||
WebIDL::ExceptionOr<JS::NonnullGCPtr<DynamicsCompressorNode>> DynamicsCompressorNode::construct_impl(JS::Realm& realm, JS::NonnullGCPtr<BaseAudioContext> context, DynamicsCompressorOptions const& options)
|
||||
{
|
||||
// Create the node and allocate memory
|
||||
auto node = realm.vm().heap().allocate<DynamicsCompressorNode>(realm, realm, context, options);
|
||||
auto node = realm.create<DynamicsCompressorNode>(realm, context, options);
|
||||
|
||||
// Default options for channel count and interpretation
|
||||
// https://webaudio.github.io/web-audio-api/#DynamicsCompressorNode
|
||||
|
|
|
@ -25,7 +25,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<GainNode>> GainNode::create(JS::Realm& real
|
|||
WebIDL::ExceptionOr<JS::NonnullGCPtr<GainNode>> GainNode::construct_impl(JS::Realm& realm, JS::NonnullGCPtr<BaseAudioContext> context, GainOptions const& options)
|
||||
{
|
||||
// Create the node and allocate memory
|
||||
auto node = realm.vm().heap().allocate<GainNode>(realm, realm, context, options);
|
||||
auto node = realm.create<GainNode>(realm, context, options);
|
||||
|
||||
// Default options for channel count and interpretation
|
||||
// https://webaudio.github.io/web-audio-api/#GainNode
|
||||
|
|
|
@ -26,7 +26,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<OfflineAudioContext>> OfflineAudioContext::
|
|||
// A NotSupportedError exception MUST be thrown if any of the arguments is negative, zero, or outside its nominal range.
|
||||
TRY(verify_audio_options_inside_nominal_range(realm, number_of_channels, length, sample_rate));
|
||||
|
||||
return realm.heap().allocate<OfflineAudioContext>(realm, realm, number_of_channels, length, sample_rate);
|
||||
return realm.create<OfflineAudioContext>(realm, number_of_channels, length, sample_rate);
|
||||
}
|
||||
|
||||
OfflineAudioContext::~OfflineAudioContext() = default;
|
||||
|
|
|
@ -26,7 +26,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<OscillatorNode>> OscillatorNode::construct_
|
|||
{
|
||||
// FIXME: Invoke "Initialize the AudioNode" steps.
|
||||
TRY(verify_valid_type(realm, options.type));
|
||||
auto node = realm.vm().heap().allocate<OscillatorNode>(realm, realm, context, options);
|
||||
auto node = realm.create<OscillatorNode>(realm, context, options);
|
||||
return node;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue