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:
Shannon Booth 2024-11-14 05:50:17 +13:00 committed by Tim Flynn
commit 9b79a686eb
Notes: github-actions[bot] 2024-11-13 21:52:48 +00:00
326 changed files with 697 additions and 714 deletions

View file

@ -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);

View file

@ -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;
}

View file

@ -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)

View file

@ -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)

View file

@ -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;

View file

@ -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;

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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;

View file

@ -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;
}